Я пытаюсь выяснить, возможно ли (и как) определять экземпляры экземпляров для синонимов с несколькими параметрами.
Например:
{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
type F a b = a -> b
data DF a b = DF (a -> b)
class C c a b where
doc :: c a b -> a -> b
Он работает для экземпляра с несколькими параметрами:
instance C DF a b where
doc (DF f) x = f x
Но это не работает для синонимов типов:
-- ERROR:
--
-- Type synonym `F' should have 2 arguments, but has been given none
-- In the instance declaration for `C F a b'
--
instance C F a b where
doc f x = f x
Можно ли определить экземпляр класса типа для F
?