在Pipes教程中,它说这个:
加上这个:
这对我来说毫无意义。能否有人澄清一下吗?
-- s :: Monad m => Producer a m () -- i.e. 'P.stdinLn'
-- f :: Monad m => a -> Producer b m () -- i.e. 'duplicate'
-- g :: Monad m => b -> Producer c m () -- i.e. '(lift . putStrLn)'
for (for s f) g = for s (\x -> for (f x) g)
加上这个:
(~>) :: Monad m
=> (a -> Producer b m ())
-> (b -> Producer c m ())
-> (a -> Producer c m ())
(f ~> g) x = for (f x) g
等于这个:
f :: Monad m => a -> Producer b m ()
g :: Monad m => b -> Producer c m ()
h :: Monad m => c -> Producer d m ()
(f ~> g) ~> h = f ~> (g ~> h)
这对我来说毫无意义。能否有人澄清一下吗?
~>
的定义扩展表达式(f ~> g) ~> h = f ~> (g ~> h)
。结果与第一个定理完全相同,但稍微更具体:all y . for (for (f y) g) h = for (f y) (\x -> for (g x) h)
。 - user2407038~>
的定义改写为(~>) = \f g x -> for (f x) g
,阅读起来会更容易一些?我能理解同时使用中缀和后缀符号可能会引起混淆。 - chix
已经消失了。对这些推导不太熟悉。 - user1002430