我想返回预期的类型IO [a]
我试过了: 键入我想要的
value
我该怎么办?
答案 0 :(得分:6)
如果您有纯值,转换为monadic值的方法是使用return
(aka pure
)函数:
fc :: [a] -> IO [a]
fc list = return list
但是如果您想在列表上映射show
函数,结果将为[String]
,因为函数show :: a -> String
会将任何值转换为String
,所以:
fc :: Show a => [a] -> IO [String]
fc list = return $ map show list
注意Show a
约束。它告诉编译器类型a
,无论它是什么,都必须支持函数show
。没有它,这样的功能不会进行类型检查。
sequence
函数完全位于该点之外,因为它将monadic值列表转换为一个列表的monadic值。如果要使用该函数,则传递给它的列表必须是monadic值列表,例如:
fc :: Show a => [a] -> IO [()]
fc list = sequence $ map print list
此处,print
是一个打印出值的IO ()
操作。
如果您想要更精确的答案,则需要更清楚地指明您尝试做的事情。