十一日目
お久しぶりです!! 台風一過。
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 580回
- この商品を含むブログ (69件) を見る
7.3
data Person = Person String String Int Float String String
- クラスのメンバ変数っぽい。
- もしくはコンストラクタみたいな
- 変数に名前つけられないんかな...
やれやれ。こんなの書いてても全然楽しくないっすね!
うそだよー、ありますよ! ハッハッハッ!
雑で良い。
レコードを用いればメンバ変数的なソレに名前つけれてる(ようなもん(怒られそう))
- あとは型の表示が見やすいし、順番も気にしなくて良い
- フィールド名を指定しない方法ももちろんできる
- obj-Cとかswiftとか思い出した
- 関数を生み出してるけど関数の名前被りそうで心配
- 実際に同じ名前を持った型をもう一つ作ったら怒られた
- あとは型の表示が見やすいし、順番も気にしなくて良い
7.4
::
で型を詳しく指定- 型引数、リストで散々やったのでそんなもんかという感想
- Haskellはケツコンマを許さない
- この本では要素の前に
,
つけることでいい感じにしてるけどそういう文化なのかな
- この本では要素の前に
data TestP = TestP { testName :: String , testFlavor :: String }
data Car a b c = Car { company :: a, model :: b, year :: c } deriving (Show)
みたいにして(TestP
は Show
できないのがミソ)ghciで、
let a = Car "a" "b" $ TestP "c" "d"
ってすると普通に通ったので、a,b,cが Show
できるかどうかというのは見てなさそう。もちろん ghci に出力するタイミングで死ぬけど。これ安全なんだろうか...
調べてみたらそもそも
deriving
は一部の型クラスにしか使えないらしい。- コンパイラによって違うとか書いてあるしよくわからん ( http://stackoverflow.com/questions/3864647/how-does-deriving-work-in-haskell )
まあできればやるみたいなそういう文脈なのかな、リストとか考えてもそういうことなのだろう
と思ったらデータ宣言には型クラスをつくらず、関数で制限するという文脈らしい。
- 要するに関数側で型制約をつけましょうという感じっぽい
とにかくジェネリック
Vector a
における a は型引数
7.5
- さっき調べてたやつじゃん。
read
はshow
の逆True
とFalse
って大小比較できたんだJust 3 > Just 2
はいけるけどJust 3 > 2
は無理なんですねえ- どちらかがどちらかに変換すればよさそうな気がする?
data TwoItems = Hoge | Piyo deriving (Eq, Ord, Show, Read, Bounded, Enum)
して succ Piyo
すると怒られる。どうやらこれだけじゃループは無理そう。独自に書いたらよさそう。
7.6
- 型シノニム。タプルとか適当に型シノニム使っていくと便利そう
- 関数内限定で型シノニム使えるとよさそう
Either
よくわからん...- エラー情報を入れることも出来るみたいなざっくりした理解
- タプルやクラスと何が違うんだかわからん、特化したものと捉えてるけど
感想
- 久しぶりだけどやっぱ楽しいですね
- 最近とにかく遅延評価してくれという気持ちでいる
- 型クラスのあたりは大体わかってきた気がする、文法を学んでいる感覚
- これぐらい自分で作ればいいじゃんみたいなものが多く用意されてるイメージがある。よく言えば便利だしコンテキストの共有ができる。