Haskell 在哈斯凯尔有与作家莫纳德的彭定康匹配吗?
在Haskell中,模式匹配的正确方法是什么 我想做如下事情Haskell 在哈斯凯尔有与作家莫纳德的彭定康匹配吗?,haskell,monads,Haskell,Monads,在Haskell中,模式匹配的正确方法是什么 我想做如下事情 import Control.Monad.Writer hoge :: Writer [Int] (Int, String) -> String hoge (Writer (_, (_, s))) = s 实际上,我真的不知道Writer和WriterT和Writer.Identity之间的区别,等等 非常感谢您的指导。如果我正确理解了您的意图,您可以使用运行Writer从您的编写器中获取((Int,String),[Int]
import Control.Monad.Writer
hoge :: Writer [Int] (Int, String) -> String
hoge (Writer (_, (_, s))) = s
实际上,我真的不知道Writer
和WriterT
和Writer.Identity
之间的区别,等等
非常感谢您的指导。如果我正确理解了您的意图,您可以使用
运行Writer
从您的编写器中获取((Int,String),[Int])
,然后从中提取字符串。类似于snd的东西。fst。可能是runWriter…
WriterT
是当您需要将Writer
与其他monad组合时使用的工具。与其为Writer
和WriterT
编写单独但类似的实现,不如只为WriterT
编写实现,并将Writer
定义为使用标识的WriterT
。Identity
monad实际上什么都不做;您可以简单地假装它不在那里。您可能想查看Writer和Writer的名称。为什么在以后放弃编写结果时要创建Writer?或者换一种说法,为什么你需要一个编写器,而不能只使用一个纯函数呢?上面的函数只是一个示例。在实际代码中,我总是使用Writer和monad函数(>>=)。谢谢。我知道runWriter的功能。但是let s=snd$fst$runWriter w
太长了。我希望我能通过模式匹配获得内容。你不能在它上进行模式匹配,因为它不是一种新的数据类型