误解List monad

时间:2014-12-23 07:09:55

标签: haskell monads

我很困惑为什么我为我的程序获得以下输出:

-- test.hs

f :: Int -> [[Int]]
f 0 = []
f x = do
  y <- [0, 1]
  g <- f (x - 1)
  return (y : g)

main :: IO ()
main = print $ f 2

我希望这个程序的输出是

[[0, 0], [0, 1], [1, 0], [1, 1]]

然而,我得到的只是

$ ghc -o test test.hs && ./test
[]

有什么想法吗?

1 个答案:

答案 0 :(得分:10)

尝试

f 0 = [[]]

看起来f x生成长度为x的按位组合,因此f 0必须包含长度为0的序列,即空列表。