Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 哈斯克尔,如何打开我的单子_Haskell_Io_Monads - Fatal编程技术网

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 for
IO
@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 for
IO
@HaskellFun您可以教纯值如何成为
IO
-就像
return::a->IO a
@HaskellFun如果您需要帮助,您必须说得更多。为什么它没有帮助您?您尝试了什么?出了什么问题?@HaskellFun正如我在前面的评论中建议的那样:使用
return
,如在
fmap(+1)(返回21)
@HaskellFun中,如果您有进一步的问题,我鼓励您打开一个新的顶级线程。还要注意,
IO
是一个类型构造函数,但没有名为
IO
的术语构造函数——因此
IO(右12)
不是一个好的思维模式。一定要坚持建议的进一步阅读;我认为它会澄清你的许多误解。