Haskellメモ その2
日記「Haskellメモ その1 - oknknicの日記」に引き続きHaskellネタ。
今回もコマンド例、コード例を書き連ねる。
型に関して
ghci :t 1 :t 'a' :t "a" let f x = x * x :t f let f x = length x :t f :q
明示的な型宣言
echo "f :: Int -> Int" > f.hs echo "f x = x * x" >> f.hs cat f.hs ghci :l f.hs :t f f 10 f 1.5 :q
型変数と型クラス制約
echo "f :: Num a => a -> a" > f.hs echo "f x = x * x" >> f.hs cat f.hs ghci :l f.hs :t f f 10 f 1.5 :q
パターンマッチ、ガード、where、再帰関数
(※ .hs ファイルとして保存することを前提として記載)
f :: (Num a , Eq a) => a -> a f 0 = 1 f x = x * f (x - 1)
f :: (Int, Int) -> (Int, Int) -> (Int, Int) f (x1, y1) (x2, y2) = (x1 + x2, y1 + y2)
f :: (a, a, a) -> a f (_, _, z) = z
f :: Int -> String f x | x > 3 = "big !" | x < 1 = "small !" f 3 = "3" f 2 = "2" f 1 = "1"
f :: Int -> String f x | double x >= 100 = "big !" | double x < 100 = "small !" where double x = x * x
sum' :: Num a => [a] -> a sum' [] = 0 sum' (h:t) = h + sum t
let式
let f x = x * x in f 2
[ x | (y,z) <- zip ["1","2","3"] ["a","b","c"] , let x = y ++ z ]
関数合成
let f x = x * x let g x = x + 1 (f . g) 10
補足:コンパイル時の警告も表示するには
ソースファイルの冒頭に以下を記述すればOK。例えば、パターンマッチが網羅的でない場合などにGHCに怒ってもらえる。
{-# OPTIONS -Wall #-}
警告の場合でもコンパイルエラーにしたい場合は下記の記述に。
{-# OPTIONS -Wall -Werror #-}
参考文献
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 580回
- この商品を含むブログ (73件) を見る