ここには、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。 -} -}