2012-01-01から1ヶ月間の記事一覧

Haskellでチューリングマシン(3) モナドを使ってどうするか

チューリングマシンを作るに当たって、テープを操作する処理をモナドにするというのを試みたわけですが、もとよりモナドの使い方がよく解っていないため改めて見返すとなかなか酷い出来です。結局、自分でもしっくり収まっていなかったのでしばらく停滞して…

状態系モナドの作り方

よく言われている事ですが、モナドには副作用を再現する「状態系モナド」(IO、State等)と、値が無い状態や計算の失敗を扱う事ができる「失敗系モナド」(Maybe、List等)の二種類に大別できます。今回の題材は、「状態系モナド」を扱います。 状態系モナド…

Arrowの基本(2) 関数を並列に繋ぐ ***、&&& 演算子

前回からの変更点: 実際の実装に合わせて、各MyArrowクラスから関数を取り出す関数は MyArrow型クラスに定義したrunArrでは無く、各型定義のアクセサ関数を使うようにします。 module Main where --Arrow型クラス class MyArrow a where myarr :: (b -> c) …

Arrowの基本(1) >>>演算子で関数を繋ぐ

前々から気になっていたArrowを覚えるべく、あちこち資料を探してみたものの、そもそも日本語の資料が少ないので。自分で色々いじって試してみる事にしました。 一つの日本語資料として活用できるように、手順を追って何回かに別けてなるべく詳細に書いてい…

Haskellで普通にFizzBuzz

深い意味は無いです、そういえば書いたこと無かったなぁと思ったので・・・ module Main where fizzbuzz :: Integer -> String fizzbuzz x | x `mod` 15==0 = "FizzBuzz" | x `mod` 3==0 = "Fizz" | x `mod` 5==0 = "Buzz" | otherwise = show x main :: IO …

型の練習

ネタが無いのでnewtypeの練習で書いたコードを晒します。 module Main where --単価 newtype Price = Price Int deriving (Eq,Show,Read) instance Num Price where _ + _ = error "You can`t calculate Price + Price" _ - _ = error "You can`t calculate …