簡體   English   中英

Haskell管道:理解“平等”的邏輯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM