Так сложилось, что знакомлюсь с Haskell-ом после F#-а.
После F# мне не хватает функций pipe forward (|>) и forward composition (>>). Вот как они могли бы выглядеть в Haskell-е:
(|>) :: a -> (a -> b) -> b
x |> f = f x
(>>) :: (a -> b) -> (b -> c) -> a -> c -- конфликтует с Prelude.>>
(>>) f g x = g (f x)
Интересно то, что в F# есть так же и backward варианты (<|) и (<<), что соответствует ($) и (.) в Haskell-е, но аналогов forward вариантов в Haskell-е нет. Использование ($) и (.) в длинных пайпах неудобно, т.к. требует чтения справа налево (снизу вверх), что не очень естественно в длинных комбинациях.
Вопрос в том, что собственно делают (как оформляют код) программисты на Haskell-е, когда нужно скомбинировать довольно длинный pipe или композицию функций (от 4х и более функций), когда комбинация не входит в одну строку?
Здравствуйте, samius, Вы писали:
S>После F# мне не хватает функций forward composition (>>).
Хм... Есть Control.Arrow, например.
instance Arrow (->) where
...
f >>> g = g . f
...
... << RSDN@Home 1.2.0 alpha 4 rev. 1325>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll