type String = [Char]
type Pos = (Int, Int)
type Board = [Pos]
data Move = Left | Right | Up | Down
move :: Move -> Pos -> Pos
move Left (x,y) = (x-1,y)
move Right (x,y) = (x+1,y)
move Up (x,y) = (x,y-1)
move Down (x,y) = (x,y+1)
moves :: [Move] -> Pos -> Pos
moves [] p = p
moves (m:ms) p = moves ms (move m p)
flip :: Move -> Move
flip Left = Right
flip Right = Left
flip Up = Down
flip Down =Up
-
- クラスの定義
- classを用いて宣言
- classは型を要素とするので、帰属する型も書く
- 帰属する型が満足するメソッドを宣言する
- その上で、帰属する型ごとにメソッドに対応する表現を書く(インスタンスの行を書く)
- インスタンスを引き継ぐにはderivingを使う
- モナド型の宣言
- IOのところでも書いたように、モナド型はモナド型と他の型のペアを作ったり、順序をつけて処理をしたり、という特定のルールがあるので、それに関する記載のルールがある