読者です 読者をやめる 読者になる 読者になる

Injective Functional Dependency

マルチパラメタクラスの型変数間に一対一の対応関係をもたせたいとする。 このとき、型変数の間に相互にfuncitonal dependency をもたせればよい。

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}

-- | this typechecks
class Foo a b | a -> b, b -> a where
  foo :: a
  bar :: b