My guess is because it's turning map[T, S](s: openArray[T]; op: proc (x: T): S into map[T, R](self: Option[T]; callback: proc (input: T): R): Option[R]
Works if you change pick to list.mapIt(it.field) which also happens to be more efficient, if that's important.
But the lesson is really: don't use converters, crazy things like this happen
Thanks, after your explanation I tried to limit the scope of converter, and it works.
converter to_option*[T: object | tuple | int | float | bool](v: T): Option[T] =
v.some