АХ
Size: a a a
АХ
VD
АХ
AA
AA
АХ
NI
F
D
F
F
F
JS
JS
JS
F
AS
class Curryable (list :: [Type]) whereПонадобилась мне недавно одна функция, никак написать не получается
hetCurry' :: (HList list -> a) -> Curry list a
instance Curryable '[] where
hetCurry' f = f Unit
instance Curryable bs => Curryable (a ': bs) where
hetCurry' f a = hetCurry' $ f . (a :>>)
hetCurry :: forall list a. (HList list -> a) -> Curry list a
hetCurry = hetCurry'
Curriable a выполняется всегда, но я готов ради благого дела его перехетрить (пробовал Incoherent instances и unsafeCoerceConstraint, ловил либо то, что всегда использовался инстанс который никогда не должен вызываться, либо сегфолты если unsafeCoerceConstraint). Если кто то умеет писать такую функцию или хотя бы доказывать что это невозможно - помогите пожалуйстаtype family Curry (list :: [Type]) a :: Type where
Curry '[] a = a
Curry (b ': cs) a = b -> Curry cs a
JS
class Curryable (list :: [Type]) whereПонадобилась мне недавно одна функция, никак написать не получается
hetCurry' :: (HList list -> a) -> Curry list a
instance Curryable '[] where
hetCurry' f = f Unit
instance Curryable bs => Curryable (a ': bs) where
hetCurry' f a = hetCurry' $ f . (a :>>)
hetCurry :: forall list a. (HList list -> a) -> Curry list a
hetCurry = hetCurry'
Curriable a выполняется всегда, но я готов ради благого дела его перехетрить (пробовал Incoherent instances и unsafeCoerceConstraint, ловил либо то, что всегда использовался инстанс который никогда не должен вызываться, либо сегфолты если unsafeCoerceConstraint). Если кто то умеет писать такую функцию или хотя бы доказывать что это невозможно - помогите пожалуйстаtype family Curry (list :: [Type]) a :: Type where
Curry '[] a = a
Curry (b ': cs) a = b -> Curry cs a