かとじゅんの技術日誌

技術の話をするところ

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

Scalazを使ってMaybeモナドを自作してみる(後編)

はい。 Scalaz Advent Calendar 2012 12/22 です。 前回に引き続き、MyOptionのためのMonoidとMonadを実装してみます。 Monoidの実装 Monoidはtrait Monoid[F]と定義されているので、今回はMyOptionのInt型の実装を定義します。 コードは次のとおり。 実装す…

Scalazを使ってMaybeモナドを自作してみる(前編)

Play or Scala Advent Calendar 2012の 12/21日の記事です。 モナドを理解するために、Haskellでモナドを作ってみたのですが、Scalaz*1でもMaybeモナドを作ってみようと思い試した結果を報告します。 MyOptionを定義する 例のごとくMaybe型を定義します。 Ha…

Maybeを自作してみる(Monad編 その2)

do式でのモナドの記述方法について簡単にまとめる。 Some 1 >>= \x -> Some(x+2) をdo式に書き直すと apply = do a <- Some 1 Some $ a + 2 Monadにはreturnがあるのでそれに書き換える。 apply = do a <- return 1 :: Option Int return $ a + 2 関数の引数…

Maybeを自作してみる(Monad編 その1)

Monadを調べていると、モナモナ言いたくなりますね! さて、OptionをMonad対応する例を書いてみます。 Monad型クラスは次のような定義になっています。returnと>>=を実装せいということらしい。 class Monad m where return :: a -> m a (>>=) :: m a -> (a …

Maybeを自作してみる(Monoid編その2)

前回の続きから、Maybeの中身がMonoidだった場合の型クラスの実装は次のとおり。 import Data.Monoid data Option a = None | Some a deriving (Eq, Ord, Read, Show) instance (Monoid a) => Monoid (Option a) where mempty = None None `mappend` any = a…

Maybeを自作してみる(Monoid編)

今回は自作したMaybe用のMonoid型クラスの実装を作ってみます。 Monoidって何ってさっぱりわからないので、型クラスの定義を見てみます。 class Monoid m where mempty :: m mappend :: m -> m -> m mconcat :: [m] -> m mconcat = foldr mappend mempty mco…

ページング用データに対応したFunctorを実装してみる

連続投稿ですが、すごいH本を読みながら、ふとアイデアが湧いてきたのでHaskellコードを書きなぐってみた。 すごいHaskellたのしく学ぼう!作者: Miran Lipovaca出版社/メーカー: オーム社発売日: 2012/09/21メディア: Kindle版購入: 1人 クリック: 4回この…

Maybeを自作してみる(Applicative編)

Maybeの自作ですが、前回に引き続きApplicative型クラスの実装を追加してみました。 コードは次のとおり。 import Control.Applicative data Option a = None | Some a deriving (Eq, Show) instance Functor Option where fmap f (Some x) = Some (f x) fma…

Maybeを自作してみる(Functor編)

モナドを理解するためにMaybeを自作することにしたので、適当にコードさらしてみる。モナド強者の方のツコッミあれば、よいコンテンツ化するのでは感。 data Option a = None | Some a deriving (Eq, Show) instance Functor Option where fmap f (Some x) =…