所以我创造了这个功能,给我的 “N” 第一要素从列表中,“(B:BS);函数take6错误中的非穷举模式?
1 module Sexta where
2
3 take6::Int->[a]->[a]
4 take6 n (b:bs) = if n<=0 then []
5 else [b] ++ (take6 (n-1) bs)
的问题是,当我尝试:take6 2 []
,它表明:
*** Exception: sexta.hs:(4,1)-(6,15): Non-exhaustive patterns in function take6
我不为什么,因为当我尝试这手:
take6 2 []
= [] ++take6 1 []
= [] ++[]++take6 0 []
= [] ++[]++[]
= []
是的,它可能更有效。但是,当GHC在启用优化的情况下运行时,它们最终应该是相同的。我没有检查过这个例子,但是有一些特殊的规则将文字列表排除为'build'形式,它应该与'(++)'中的'foldr'形式融合。在这种情况下,依靠这种优化是毫无意义的,但我认为使用'[a]'作为foldMap的monoid目标时更重要。 – dfeuer