Haskell IO - 直接从标准输入读取到列表

时间:2015-06-22 19:33:40

标签: haskell

Haskell IO系统对我来说非常难以理解所以我有疑问:如何从标准输入读取到列表?我知道有函数getLine :: IO String和交互。但我不知道如何将输入转换为列表,所以我可以在这三个函数中使用它:

powerset []     = [[]]
powerset (x:xs) = xss ++ map (x:) xss
                               where xss = powerset xs
main = print $ powerset([1,2])

import Control.Monad(filterM)
p = filterM(const[True,False])
main = p[1,2]

main = subsequences([1,2])

我希望能够写入1 2 3并将此值传递给该函数。你能说/怎么做?

额外问题

Haskell充满魔力所以我想知道是否可以直接在函数中使用输入:

main = subsequences(some input magic here)

1 个答案:

答案 0 :(得分:5)

你可以写:

main = readLn >>= print . subsequences

您需要确定要读取的类型,例如,使用单态subsequences或注释readLn。在ghci:

Data.List> (readLn :: IO [Integer]) >>= print . subsequences
[1,2,3]
[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

(我输入了第一行和第二行 - 后面都是输入 - 第三行是结果。)

有关详细信息,您可以享受以下优秀资源之一: