関数型プログラミング言語Haskell Part9at TECH
関数型プログラミング言語Haskell Part9 - 暇つぶし2ch851:デフォルトの名無しさん
08/11/02 13:03:16
URLリンク(d.hatena.ne.jp)
ブログ持ってないのでここで。酒井さんのパクリ。

{-# OPTIONS -fglasgow-exts #-}

import Control.Monad (liftM2)
import Data.Either
import Test.QuickCheck


infix 4 :<->:
type a :<->: b = (a -> b, b -> a)

(.>) :: a:<->:b -> b:<->:c -> a:<->:c
(f1,g1) .> (f2,g2) = (f2 . f1, g1 . g2)

un :: a:<->:b -> b:<->:a
un (f,g) = (g,f)


type a :+: b = Either a b
infixr 5 :+:

alt :: a:+:b :<->: b:+:a
alt = (f,f) where f = either Right Left

swap :: a:+:b:+:c :<->: b:+:a:+:c
swap = (f,f) where f = either (Right . Left) (either Left (Right . Right))

rt :: b :<->: c -> a:+:b :<->: a:+:c
rt (f,g) = (r f, r g) where r = either Left . (Right .)


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch