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

Cos*_*uee -1 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])
Run Code Online (Sandbox Code Playgroud)

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

额外的问题

Haskell充满了魔力,所以我想知道是否有可能直接在函数中使用输入,如下所示:

main = subsequences(some input magic here)
Run Code Online (Sandbox Code Playgroud)

Dan*_*ner 5

你可以写:

main = readLn >>= print . subsequences
Run Code Online (Sandbox Code Playgroud)

您需要确定要读取的类型,例如通过单态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]]
Run Code Online (Sandbox Code Playgroud)

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

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