ここには、Haskellのチートシートを書きます。
重要だけど、頻出するし、憶えやすいものは下の方に書きます。
憶えにくいものほど上の方に書きます。
(要するに、よく確認するものほど上の方になるように書きます。)
他サイト
module Module.Name (Aaa(..)
,Bbb
,ccc
,ddd
) where
import Module.Name import Module.Name2 as Name2 import Module.Name3 (aaa, bbb) import Module.Name4 hiding (ccc, ddd) import qualified Module.Name5
hoge [] = [] hoge (car:cdr) = ... (hoge cdr)
class App a where -- (データ型)aがAppである為には、 update :: Input -> a -> a -- Inputによって古いaから新しいaを生成でき、 render :: a -> IO () -- aを表示でき、 isQuit :: a -> Bool -- 終了判定を持つ、 -- 以上の条件を満たす事。
data Hoge = Hoge (a :: Int)
(b :: Int, c :: Int)
{aaa :: String
,bbb :: [Int]
}
deriving (Eq, Ord, Show, Read)
data Mage = MageA
| MageB
| MageC (c :: Int)
deriving (Eq, Ord, Show, Read, Enum)
instance App Hoge where -- HogeはAppのインスタンスなので、 update = updateHoge -- updateとしてupdateHogeを持ち、 render = renderHoge -- renderとしてrenderHogeを持ち、 isQuit = isQuitHoge -- isQuitとしてisQuitHogeを持ち、 -- Appのインスタンスである条件を全て満たしている。
hogerara :: Int
-> Int
-> Int
-> (Int -> Int -> Int -> Int)
-> Int
hogerara a b c proc =
proc a b c
pmatch a True b c = (a * b + c) pmatch a False b c = (a + b * c)
data ZZZ = ZZZ {a :: [Int], b :: [ZZZ]}
hoge :: ZZZ -> Int
hoge zzz = let (ZZZ {a=a, b=b}) = zzz
in foldr (+) 0 a
foo a b | a == 1 = True | otherwise = False
do hoge fuge ↓ hoge >> fuge
do aaa <- hoge fuge aaa ↓ hoge >>= fuge
(あとで例を書く)
import Debug.Trace -- 例えば、以下のような式があったとして、 aaa = bbb ccc ddd -- ここの段階でcccの値がどうなってるかを知りたいなら、これを以下のようにする aaa = bbb (trace (show ccc) ccc) ddd
putTraceMsg "HOGE"アクションを適当に入れておけば良い。この場合は、stderrにHOGEが出てるかどうかで、そこが評価されたかが分かる。
:h
:module + ModuleName
let hoge = ...
:!
:q
[]
[1, 2, 3]
-- 複数行の時は以下のように書く
hoge = ["value 1"
,"hoge 2"
,"aaa 3"
]
(cons 1 '(2 3 4)) は (1 : [2, 3, 4])
((:) 1 [2, 3, 4])
(append '(1 2) '(3 4 5)) は ([1, 2] ++ [3, 4, 5]) または ((++) [1, 2] [3, 4, 5])
(\arg1 arg2 -> ...body...)
{-
これは、schemeでの(lambda (arg1 arg2) ...body...)と同じ。
頻出するので要暗記。
-}
-- 一行コメント
{-
複数行コメント。{- 入れ子ok。 -}
-}