H本を読む: Part 2
この記事は PMOB Advent Calendar 2015 - Adventar の 16 日目の記事です.
次: LuCielNoblesse - まともな記事書く方に1ルピー賭ける
前回のつづきです.
データ型
車をつくろう
data Car = Car { company :: String , model :: String , year :: Int } deriving (Show)
できた.
使うときは
let kuruma = Car {company = "Porushe", model = "Koukyu", year = 1967} -- 色々と適当
みたいな
型Carに対しての処理の記述
dataStrCar :: Car -> String dataStrCar (Car { company = c, model = m, year = y}) = "会社: " ++ c ++ ", モデル: " ++ m ++ ", 年: " ++ y
で
dataStrCar kuruma
みたいな感じで呼び出し
型コンストラクタ
型を引数に取って新たな型を作るもの
例:
data Maybe a = Nothing | Just a -- これからMaybe IntとかMaybe Charとかが生まれる
使うときには,大抵は明示的に型を渡さなくても推論してくれるっぽい. すごい.
例: 三次元ベクトル
Vector a = Vector a a a deriving (Show)
で
mul :: (Num a) => Vector a -> a -> Vector a (Vector x y z) 'mul' m = Vector (x*m) (y*m) (z*m)
みたいな.
Verctor a a a -> Hoge
とかじゃなくてVector a -> Hoge
ってなことに注意.
Vector a
で一つの型になるんやでって話
型クラス =/= 僕の知ってるクラス
全然ちゃうやん...
型クラスはインターフェイスのようなもの.特定の振る舞いを定義する.
とりあえず頭空っぽにして読んでみたらあっふーんってなった.
Functor?なにそれ
いやいや,Wikiみて分かるなら苦労してないんだよ...
Functor型クラスについてみると,
class Functor f where fmap :: (a -> b) -> f a -> a b
いわく
ファンクターになれるのは箱のような働きをする型
だそうな.
だからMaybe
とかListとかもファンクタなんだって(合ってる?).
自分の認識では「map
やらfmap
でいじれるようなヤーツのこと」って思っちゃってるけど,
もっとよまなきゃなァ
〆
はい.読みきれませんでした...
しかーしとてもおもしろい!!!!!
僕は Java入門 -> Scala入門 (チョットだけLispさわり) -> FPScala (を途中までで挫折)
-> すごいH本
とガタガタ道を進んできたけど,H本を読んでで見通しが広くなっていくのを感じる.
今の僕に合ってると思うのでこれからも読もうと思うから,
一応読みきるまではBlogを上げていこうかな.