gpt4 book ai didi

list - Haskell获取IO列表元素

转载 作者:行者123 更新时间:2023-12-02 01:01:48 24 4
gpt4 key购买 nike

我有一个由元组组成的类型同义词 Card。我还有一个类型同义词 Deck 定义为 [Card](卡片列表)。

由于文件读取,我被 IO monad 困住了,具体来说,我有一个 IO Deck 类型的对象。我将如何检索卡片列表的各个元素?由于 IO monad,该类型似乎不再是列表,所以我不能使用 !!运营商。

最佳答案

这里的主要问题是您根本不知道如何操作 monad,所以这里有一些提示:

Monad 有一些函数可以让它们被操纵。这些源于 monad 类型类中定义的基本类型,return>>=(又名“绑定(bind)”)。

return 允许构造一个 monad,>>= 首先获取一个 monad,然后是一个构造 monad 的函数,并将该函数应用于给定的值.这是您在您的案例中使用它的方式:

-- Imagine your list to be here:
ioList :: IO [Int]
ioList = return [1,2,3,4,5]

-- If we were to print the second element...
main = ioList >>= ( \a -> return (a !! 1) ) >>= print

-- We could write this in do-notation, syntactic sugar for the above:
main = do
list <- ioList
print (list !! 1)

也可以使用 Control.Monad 中的函数 liftM,它接受一个函数并将其应用于 monad,如下所示:

import Control.Monad
main = print (liftM (!! 1) ioList)

您可以找到更多操作 monad 的方法,以及对所涉及的各种类型签名的解释,以及 do-notation 和其他 here .

关于list - Haskell获取IO列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27733492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com