by shigemk2

当面は技術的なことしか書かない

明示的な型宣言

# :tでその式の型を教えてくれる。
Prelude> :t 'a'
'a' :: Char
Prelude> :t True
True :: Bool
Prelude> :t "Hello!"
"Hello!" :: [Char]
Prelude> :t (True, 'a')
(True, 'a') :: (Bool, Char)
Prelude> :t 4 == 5
4 == 5 :: Bool

なお、関数も型を持つ

以下のような関数があったとしよう
(というか前回の関数プログラムを拝借)

-- lengthを改造(リスト内の全ての要素を1にして、全ての要素を足す=要素の長さを求められる)
length' xs = sum [1 | _ <- xs ]
-- リスト内の大文字の文字列を全て削除
removeNonUppercase st = [ c | c <- st, c `elem` ['A'..'Z']]
-- 3つの整数を足し合わせる
addThree x y z = x + y + z
# 文字列を引数として取り、別の文字列を結果として返すという意味。
Main> :t removeNonUppercase
removeNonUppercase :: [Char] -> [Char]
# 引数と返り値の型は -> で区切り、返り値の型は常に宣言の最後に置く
Main> :t addThree
addThree :: Int -> Int -> Int -> Int