Haskell

すごいHaskell十一章

難しすぎて1日1ページのペース。 234pの真ん中下、 Either って Functor のインスタンスじゃないみたいだけど… ghci> fmap (replicate 3) (Right "blah") <interactive>:19:1: No instance for (Functor (Either a0)) arising from a use of `it' Possible fix: add an in</interactive>…

すごいHaskell10章

これまでの章はHaskellの書き方や機能の紹介メインだった。この章は、ここまでで学んだことを使って、実際の問題を解いてみようという章。畳込みをどう使うのか、という例がメインっぽい。 RPN 任意の浮動小数点数のRPN式を計算できて、しかも容易に拡張でき…

すごいHaskell9章

9.5正誤表もどき 194ページのremove関数が、コマンドライン引数を利用せずハードコーディングされたファイルを使っている。 ページ・行 誤 正 解説 194ページ・remove関数内19行目 removeFile "todo.txt" removeFile fileName 引数を使うよう修正 194ページ…

すごいHaskell8章

アクションと型コンストラクタ アクションと型コンストラクタの違いって何だろう。あと、どうやって区別するんだろう。 例えば getLine の型を見てみる。 ghci> :t getLine getLine :: IO String これって、型コンストラクタ IO が、具体型 String を受け取…

そもそも代数データ型って何よ?

と思ってググったらウィッキペディーアーが最初に出てきた。 代数的データ型 - Wikipedia 値をコンストラクタで包んだ感じなのね。実装でもそんな感じになってるしな。 解説してるページがあった。 Haskell の代数的データ型と型クラス、instance 宣言の関係…

すごいHaskell七章後半(7.7〜終わりまで)

Listを作ってみる+値コンストラクタについて data List a = Empty | Cons a (List a) deriving (Show, Read, Eq, Ord) Consは:を言い換えたものって書かれてるので実際に型を見てみる。 ghci> :t (:) (:) :: a -> [a] -> [a] ghci> :t Cons Cons :: a -> Li…

すごいHaskell七章後半(7.4〜7.6まで)

自分が疑問に思ったり、理解できなかったところを埋めるために書いてたのが、いつのまにか本のコピペになってたので軌道修正したい。 型コンストラクタと値コンストラクタ 3次元ベクトル型 Vector data Vector a = Vector a a a deriving (Show) の、 Vector…

すごいHaskell七章(後半 7.4まで)

型コンストラクタ・型引数 data Maybe a = Nothing | Just a ここでの Maybe が型コンストラクタ。 a は型引数。 Maybe が型引数に型を受けとることで、 Maybe Int, Maybe Char などの型を作ることが出来る。例えば、 Just 1 の型は Num a => Maybe a …これ…

すごいHaskell六章 (後半6.3から終わりまで)

連想リスト 山場が来たぞー!ドコドコドコドコドコドコドコドコ キー(Stringだけど)が重複してる(ペアのリスト型)連想リストにfindKey(Maybeでない)を使うとどうなるか。 phoneBook :: [(String, String)] phoneBook = [("betty", "555-2938") ,("bonnie", "45…

すごいHaskell六章(後半 6.2まで)

この章、五章以上にヘビーなんですが。(だが我々はこの時気づいていなかった…六章をさらに上回る強大な章の存在に。) 六章が急激に難しくなった気がするのは、五章までは文法中心だったからかな。あと、ここから型引数とかMapとかHaskellが本気出し始めた…

すごいHaskell六章(前半)

文法三昧から少しソフトウェアっぽくなってくる import モジュールのインポート。qualifiedで名前空間を分けられる。qualified as で別名を付けて短縮できる。 単語数えたりするところ ちょっとwordsやgroupの挙動が気になったので。 wordsはスペースでsplit…

すごいHaskell五章(後半)

畳み込ぞ 「基底部は空リストとし、x:xsパターンを使ってリストを先頭要素と残りのリストに分解する」 というパターンを関数にしたものがfold…多分。 毎度のことだが、最初の概要を見ただけじゃ何もわからない。例を見て、自分で処理を追わないと。 本の例は…

すごいHaskell五章(前半)

高階関数 引数として関数を受け取ったり、返り値として関数を返す関数。 カリー化 グワーッ!キモン! 複数の引数を取る関数は、1つ引数を受け取るたびに、引数が一つバインディングされた新しい関数を返す。 ghci> :t max max :: Ord a => a -> a -> a ghci…

すごいHaskell三章

パターンマッチ 引数の値、構造でマッチさせる。 if文で書くと sayMeIf :: Int -> String sayMeIf x = if x == 1 then "One!" else if x == 2 then "Two!" else if x == 3 then "Three!" else if x == 4 then "Four!" else if x == 5 then "Five!" else "Not…

すごいHaskell二章

型 型があるとか関数定義の時は型の定義も書くとか。 型変数 どんな型も取りうることを示す変数。 同じ名前の型変数は、同じ型が入る。 多分コンパイルする時に特定の型に決定されるんだろうな。 中置関数 1 + 2 の" + "みたいな置き方をする関数。つまり演…

すごいHaskell一章

リストとタプル リストは要素の型まで含めて型。 タプルはさらにサイズまで含めて型なのか。 リストは同じ型の要素しか持てないけど、タプルは異なる型の要素を持てる。 リストはサイズ(要素の数)を変更できるけど、タプルはサイズ固定。 [1,2] [1,2,3] は…