かとじゅんの技術日誌

技術の話をするところ

Haskell

関数のカリー化と部分適用

今日は、カリー化と関数の部分適用の話題。 Haskellの視座からScalaのカリー化と部分適用を見てみる まず、Haskellでの関数のカリー化と部分適用についておさらい。 例えば、引数を合計する関数 mysum があるとして、 mysum :: Num a => a -> a -> a -> a my…

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) =…