Preludeで以下のHaskellコード(here)で定義されている関数の使い方を理解しようとしています。これらの関数を 'List'型に使用する方法
module List
where
data List a = Nil
| Cons a (List a)
listLength :: List a -> Int
listLength Nil = 0
listLength (Cons x xs) = 1 + listLength xs
{-
listHead :: List a -> Maybe a
listHead Nil = Nothing
listHead (Cons x xs) = Just x
listTail :: List a -> Maybe (List a)
listTail Nil = Nothing
listTail (Cons x xs) = Just xs
-}
listHead :: List a -> a
listHead (Cons x xs) = x
listTail :: List a -> List a
listTail (Cons x xs) = xs
listFoldl :: (a -> b -> a) -> a -> List b -> a
listFoldl f c Nil = c
listFoldl f c (Cons x xs) = listFoldl f (f c x) xs
listFoldr :: (a -> b -> b) -> b -> List a -> b
listFoldr f c Nil = c
listFoldr f c (Cons x xs) = f x (listFoldr f c xs)
ghci List.hs
コマンドを使用してロードしました。
次に、私が使用しようとしている方法は、listHead
です。
*List> listHead (List 1:2:[])
<interactive>:7:11: Not in scope: data constructor `List'
または、次のように:
*List> listHead ('a':'b':[])
<interactive>:11:11:
Couldn't match expected type `List a0' with actual type `[Char]'
In the first argument of `listHead', namely `('a' : 'b' : [])'
In the expression: listHead ('a' : 'b' : [])
In an equation for `it': it = listHead ('a' : 'b' : [])
誰もがGHCiの中でこのコードを使用する方法について説明していただけますか?ありがとう!