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

时间:2015-06-20 09:17:23

标签: haskell

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

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

main =  powerset[1,2]

1 个答案:

答案 0 :(得分:6)

问题是main = ...

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

这对我有用:

import Control.Monad (filterM)

powerset = filterM (const [True, False])

main =
  print $ powerset[1,2]

说完之后你应该添加顶级签名:

module Main where

import Control.Monad (filterM)

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

main :: IO ()
main =
  print $ (powerset [1,2] :: [[Int]])

评论中的其他问题

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