定义返回类型IO [a] Haskell

时间:2017-12-20 00:43:42

标签: haskell

我想返回预期的类型IO [a]

我试过了: 键入我想要的

value

我该怎么办?

1 个答案:

答案 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 ()操作。

如果您想要更精确的答案,则需要更清楚地指明您尝试做的事情。