Jestem głównie praktycznym facetem, ale uważam to za interesujące.Zrozumienie sekwencjonowania w programowaniu funkcjonalnym
Myślałem o monadycznym sekwencjonowaniu i jest kilka rzeczy, które muszę wyjaśnić. Więc na ryzyko brzmiące głupie tutaj to:
monadycznego członkiem wiążą
bind :: m b -> (b -> m c) -> m c
może sekwencji „działania” daje dostęp do wyraźnej wartości pośrednich.
Jak to dać mi więcej niż kategorycznego członka (.)
:
(.) :: cat b c -> cat a b -> cat a c
Z tego mogę kolejności i uzyskać dostęp do wartości pośrednich. Po wszystkim (f . g) x = f(g (x))
.
Dlaczego potrzebuję bind
do sekwencjonowania, czy mogę sekwencjonować z (.)
?
The jednowartościowy wersję '' 'jest (> =>) :: Monad m => (.) (A -> mb) -> (b -> mc) -> (a -> mc) ', kompozycja Kleisli. –
To daje * mniej * faktycznie. 'C (a, b) = a -> m b' tworzy kategorię z" bind "jako kompozycją i' return' jako tożsamość, kategorią * Kleisli * z 'm'. –
Nie jest też do końca prawdą, że w 'f (gx)' 'gx' musi się najpierw wydarzyć. Byłoby to prawdą tylko pod ścisłą semantyką. Ale w obecnej postaci może być przed, albo w ogóle. – Ingo