Haskell powerset函数 - 如何避免无法将期望类型`IO t0'与实际类型`[[Integer]]'匹配

Cos*_*uee 2 haskell

我有一个我试图在这里运行的powerset实现:http://rextester.com/runco​​de .我仍然遇到这个错误,无法弄清楚如何使它正确.我试图尽可能多地阅读有关哈希尔的IO,但这对我来说太难了.

import Control.Monad (filterM)
powerset = filterM (const [True, False])

main =  powerset[1,2]
Run Code Online (Sandbox Code Playgroud)

Car*_*ten 6

问题是 main = ...

main应该有类型,IO ()但你给一个类型的表达式[[Integer]](编译器告诉你) - 所以我想你想把结果输出到控制台我想你正在寻找print

这对我有用:

import Control.Monad (filterM)

powerset = filterM (const [True, False])

main =
  print $ powerset[1,2]
Run Code Online (Sandbox Code Playgroud)

说过这个,你应该添加顶级签名:

module Main where

import Control.Monad (filterM)

powerset :: [a] -> [[a]]
powerset = filterM (const [True, False])

main :: IO ()
main =
  print $ (powerset [1,2] :: [[Int]])
Run Code Online (Sandbox Code Playgroud)

评论中的其他问题

stdin获取输入的常用方法是getLine :: IO String