[Haskell][F#] pipe forward & forward composition
От: samius Япония http://sams-tricks.blogspot.com
Дата: 03.01.10 16:33
Оценка: 1 (1)
Так сложилось, что знакомлюсь с 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х и более функций), когда комбинация не входит в одну строку?
Re: [Haskell][F#] pipe forward & forward composition
От: Klapaucius  
Дата: 04.01.10 10:18
Оценка:
Здравствуйте, 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
Re: [Haskell][F#] pipe forward & forward composition
От: Аноним  
Дата: 04.01.10 12:46
Оценка:
Здравствуйте, samius, Вы писали:

S> т.к. требует чтения справа налево (снизу вверх), что не очень естественно в длинных комбинациях.


Видимо, это дело привычки (я о неестественности).

S>Вопрос в том, что собственно делают (как оформляют код) программисты на Haskell-е, когда нужно скомбинировать довольно длинный pipe или композицию функций (от 4х и более функций), когда комбинация не входит в одну строку?


Такое (лично у меня) встречается редко, а если и встречается — то (как уже написали) со стрелками
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.