あなたが持っているのは2つの宣言で、2番目は最初の宣言を隠しています。
len
2 つの句を持つ 1 つの関数として宣言する必要があります。GHCi では、次のようにできます。
:{
let len [] = 0
len (h:t) = 1 + len t
:}
この:{ ... :}
フォームでは、ファイルと同じように複数行の宣言を入力でき*.hs
ます。
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> let len [] = 0
Prelude> let len (h:t) = 1 + len t -- this shadows the earlier len
Prelude> len [1, 2, 3]
*** Exception: <interactive>:3:5-25: Non-exhaustive patterns in function len
-- exception because the new len doesn't handle an empty list
Prelude> :{
Prelude| let len [] = 0
Prelude| len (h:t) = 1 + len t
Prelude| :}
Prelude> len [1, 2, 3]
3
Prelude>