Haskell 哈斯克尔,如何打开我的单子
我可以做:Haskell 哈斯克尔,如何打开我的单子,haskell,io,monads,Haskell,Io,Monads,我可以做:runIdentity,runErrorT等等来打开内部单子。 但是,如果出现IO(字符串Int中的任意一个),我该怎么办?如何打开它 您不能打开IO a操作。相反,您将它们包含在main操作中(该操作具有IO类型,因此可以使用此类操作),编译器确保执行main 您还可以教授不理解IO的函数如何处理IO;例如,我们有: fmap :: (a -> b) -> IO a -> IO b (=<<) :: (a -> IO b) -> IO
runIdentity
,runErrorT
等等来打开内部单子。但是,如果出现
IO(字符串Int中的任意一个)
,我该怎么办?如何打开它 您不能打开IO a
操作。相反,您将它们包含在main
操作中(该操作具有IO
类型,因此可以使用此类操作),编译器确保执行main
您还可以教授不理解IO
的函数如何处理IO
;例如,我们有:
fmap :: (a -> b) -> IO a -> IO b
(=<<) :: (a -> IO b) -> IO a -> IO b
fmap::(a->b)->IO a->IO b
(=IO a->IO b
因此,如果您有一个使用任意字符串Int
的函数,您可以使用上述函数之一来教它如何使用IO(任意字符串Int)
为了进一步阅读,您可能会喜欢。(我也喜欢monad教程,尽管它们与这个问题不太直接相关。)您不需要展开
IO a
操作。相反,您可以将它们包含在主操作中(该操作具有IO
类型,因此可以使用此类操作)编译器确保执行main
您还可以教授不理解IO
的函数如何处理IO
;例如,我们有:
fmap :: (a -> b) -> IO a -> IO b
(=<<) :: (a -> IO b) -> IO a -> IO b
fmap::(a->b)->IO a->IO b
(=IO a->IO b
因此,如果您有一个使用任意字符串Int
的函数,您可以使用上述函数之一来教它如何使用IO(任意字符串Int)
对于进一步的阅读,你可能会喜欢。(我也喜欢monad教程,尽管它们与这个问题不太直接相关。)你不“展开”这种类型-你可以“展开”像Identity
和error
这样的东西,因为它们只是其他类型的新类型。你不“展开”这种类型-你可以“展开”像Identity
和error
这样的东西,因为它们只是其他类型的新类型。fmap(+1)(IO 1)
give error:no constructor forIO
@HaskellFun您可以教纯值如何成为IO
-就像return::a->IO a
@HaskellFun如果您需要帮助,您必须说得更多。为什么它没有帮助您?您尝试了什么?出了什么问题?@HaskellFun正如我在前面的评论中建议的那样:使用return
,如在fmap(+1)(返回21)
@HaskellFun中,如果您有进一步的问题,我鼓励您打开一个新的顶级线程。还要注意,IO
是一个类型构造函数,但没有名为IO
的术语构造函数——因此IO(右12)
不是一个好的思维模式。一定要坚持建议的进一步阅读;我认为它会澄清你的许多误解。fmap(+1)(IO 1)
give error:no constructor forIO
@HaskellFun您可以教纯值如何成为IO
-就像return::a->IO a
@HaskellFun如果您需要帮助,您必须说得更多。为什么它没有帮助您?您尝试了什么?出了什么问题?@HaskellFun正如我在前面的评论中建议的那样:使用return
,如在fmap(+1)(返回21)
@HaskellFun中,如果您有进一步的问题,我鼓励您打开一个新的顶级线程。还要注意,IO
是一个类型构造函数,但没有名为IO
的术语构造函数——因此IO(右12)
不是一个好的思维模式。一定要坚持建议的进一步阅读;我认为它会澄清你的许多误解。