hdn:hcs

[トップ][一覧][最近の更新]


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

パターンマッチ1(シンプルなパターン分け)

pmatch a True b c = (a * b + c)
pmatch a False b c = (a + b * c)

パターンマッチ2(letとコンストラクタの組み合わせ)

data ZZZ = ZZZ {a :: [Int], b :: [ZZZ]}
hoge :: ZZZ -> Int
hoge zzz = let (ZZZ {a=a, b=b}) = zzz
             in foldr (+) 0 a

パターンマッチ3(ガード表記)

foo a b
  | a == 1  = True
  | otherwise = False

それなりに基本

アクション関連

do hoge
   fuge
↓
hoge >> fuge
do aaa <- hoge
   fuge aaa
↓
hoge >>= fuge

名前ルール

引数パターンマッチの法則

補助ツール

デバッグ

gchiの使い方

重要&頻出&要暗記&基本

リスト関係

無名関数生成

(\arg1 arg2 -> ...body...)
{-
これは、schemeでの(lambda (arg1 arg2) ...body...)と同じ。
頻出するので要暗記。
-}

コメント

-- 一行コメント
{-
複数行コメント。{- 入れ子ok。 -}
-}

優先順位に迷ったら


最終更新 : 2010/10/29 11:36:30 JST