У меня есть номер уровня типа
data Z deriving Typeable
data S n deriving Typeable
и n-арные функции (код из пакета fixed-vector)
-- | Type family for n-ary functions.
type family Fn n a b
type instance Fn Z a b = b
type instance Fn (S n) a b = a -> Fn n a b
-- | Newtype wrapper which is used to make 'Fn' injective. It's also a
-- reader monad.
newtype Fun n a b = Fun { unFun :: Fn n a b }
мне нужна функция типа
uncurryN :: Fun (n + k) a b -> Fun n a (Fun k a b)
Я прочитал несколько статей о вычислениях на уровне типов, но все о конкатенации безопасных списков типов.