所以我創造了這個功能,給我的 「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