[英]Haskell Pipes: Understanding the logic of the “for equality”
在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) x = for (f x) g
(f ~> g) = \x -> for (f x) g
(~>) f g = \x -> for (f x) g
因此:
for (for s f) g, s = e x
= \x -> for (for (e x) f) g
= \x -> for ((e ~> f) x) g
= (e ~> f) ~> g
和
for s (\x -> for (f x) g), s = e x
= \x -> for (e x) (\x -> for (f x) g)
= \x -> for (e x) (f ~> g)
= e ~> (f ~> g)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.