はわわーっ

はわわわわっ

GeneralizedNewtypeDerivingする

GeneralizedNewtypeDerivingでさよならボイラープレート - 厨二病患者のプログラミング入門みてやってみた。

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

import Control.Applicative

newtype Foo a = Foo { foo :: Maybe a }
                  deriving (Eq, Monad, Functor, Ord, Read, Show,
                            Applicative, Alternative)

とか書くと Foo が Functor とか Applicative とか Monad とかのインスタンスになる。

>>> fmap (+1) Foo { foo = Just 1 }
Foo {foo = Just 2}
>>> (+) <$> Foo { foo = Just 1 } <*> Foo { foo = Just 2 }
Foo {foo = Just 3}
>>> (+) <$> Foo { foo = Just 1 } <*> Foo { foo = Nothing }
Foo {foo = Nothing}
>>> Foo { foo = Just 1 } >>= Foo . Just . (+1)
Foo {foo = Just 2}
>>> Foo { foo = Nothing } >>= Foo . Just . (+1)
Foo {foo = Nothing}

とても便利。