Хотя я, как правило, не использовать их очень часто, в этом случае, я думаю, что я бы предпочел вариант списка понимания, потому что мне кажется чище.
Если вы в безточечный, вы могли бы это одно, тоже:
f = zip `ap` map sqrt
п.-п. жизнь в Control.Monad и в этом случае его можно рассматривать как S комбинатор, который обобщает применение в SKI calculus:
ap f g x == f x (g x)
ap const const == id
в Conal указует, это также может быть обобщенно от Монады до аппликативных констант выглядят (импорт Control.Applicative):
f = zip <*> map sqrt
Я называю это «непрозрачным haskell». В определенный момент это просто неразборчиво, точка зависит от экспозиции. – Dan
На самом деле я склонен определять функцию, которая из-за отсутствия лучшего имени я вызываю 'сохранение :: (a -> b) -> a -> (a, b)', определяемое как просто 'сохранение = (id &&&). (Иногда я также меняю порядок кортежей и определяю его как '(&& & id)'; Я должен быть последовательным.) Я всегда немного удивляюсь, что он, кажется, не выходит из любого стандарта. –
Дэн, я думаю, что это, наверное, самый простой Комбинатор стрелок для использования в реальном коде. Его имя красиво запоминается: вы можете прочитать эту строку кода вслух, как «map id и sqrt to xs». – Carl