Я пытаюсь понять смысл MultiParamTypeClasses
и FunctionalDependencies
, и следующее показалось мне очевидным:
{-# LANGUAGE MultiParamTypeClasses
, FunctionalDependencies
, TypeOperators #-}
import Data.Type.Equality
class C a b | a -> b
fob :: (C a b, C a b') => proxy a -> b :~: b'
fob _ = Refl
К сожалению, это не работает; GHC не заключает b ~ b'
из этого контекста. Есть ли способ сделать эту работу, или функциональная зависимость не "внутренне" доступна?