繁体   English   中英

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

[英]Haskell powerset function - How to avoid Couldn't match expected type `IO t0' with actual type `[[Integer]]'

我有一个要在此处运行的Powerset实现: http ://rextester.com/runco​​de。 我仍然遇到此错误,无法找出正确的方法。 我正在尝试尽可能多地阅读有关Haskell中的IO的信息,但这对我来说真的很难。

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

main =  powerset[1,2]

问题是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM