Ну, а если с другой стороны? Если параллельно рассматривать "эффекты" и типы?
pure (выраженное через fmap, или так) производит некий "нулевой эффект," E0. Он устроен так, что E0 <*> E0 = E0, E <*> E0 = E и E0 <*> E = E0. Это можно вывести из законов, что в книжке, как я понимаю.
Как-то так:
f (a -> (a -> b) -> b) -> f a -> f (a -> b) -> f b
pure (flip ($)) <*> a <*> b
E0 Ea Eb
Вроде, последовательность эффектов соблюдена.
Кстати, <*> - это символ последовательного разбора в Utrecht University parsers library. А <$>, по-моему, там был в начале последовательного разбора.
no subject
Date: 2007-12-06 03:28 pm (UTC)pure (выраженное через fmap, или так) производит некий "нулевой эффект," E0. Он устроен так, что E0 <*> E0 = E0, E <*> E0 = E и E0 <*> E = E0. Это можно вывести из законов, что в книжке, как я понимаю.
Как-то так: Вроде, последовательность эффектов соблюдена.
Кстати, <*> - это символ последовательного разбора в Utrecht University parsers library. А <$>, по-моему, там был в начале последовательного разбора.
Типа такого: Но это уже оффтопик. ;)