関数型プログラミング言語Haskell Part13
■ このスレッドは過去ログ倉庫に格納されています
0842デフォルトの名無しさん
2011/02/11(金) 23:37:28ただ、それでも、以前も書いたことだけど、オレは MonadやArrowのdo記法の存在が、圏論による抽象化の小さくない恩恵だと思っている。
他には、例えば、\x -> fmap f1 $ fmap f2 $ fmap f3 $ x = fmap (f1 . f2 . f3) ということにすぐに気が付き、関数を短く書けるということも、圏論による抽象化の恩恵なんだろう、たぶん。
あと、次のような例を思いついた。モノイドを圏に変換しているんだけど、これは(すぐに挫折した)『圏論の基礎』からの知識を使っている。
import Prelude hiding ((.), id)
import Control.Category
import Data.Monoid
data Monoid m => MonoidCategory m a b = MonoidCategory m
mc :: Monoid m => m -> MonoidCategory m () ()
mc = MonoidCategory
runMC :: Monoid m => MonoidCategory m () () -> m
runMC (MonoidCategory a) = a
instance Monoid m => Category (MonoidCategory m) where
{ id = MonoidCategory mempty
; (MonoidCategory a) . (MonoidCategory b) = MonoidCategory $ a `mappend` b }
foobar = runMC $ (mc "Foo") . id . (mc "Bar")
-- foobar => "FooBar"
■ このスレッドは過去ログ倉庫に格納されています