type Error f :: *
type Success f :: *
emitError :: Error f ~ err => err -> f
emitValue :: Success f ~ val => val -> f
seqv :: (Error fl ~ Error fr, Success fl ~ v, Success fr ~ m) => fl -> (v -> m) -> fr
instance Failable (Either a b) where
type Error (Either a _) = a
type Success (Either _ b) = b
emitError e = Left e
emitValue v = Right v
seqv m f = case m of
Right v -> Right (f v)
Left e -> Left e
компилятор чтото ругается про унификацию, хотя я не вижу причин почему этот код должен фейлится. что можно сделать?
Какой выхлоп у компилятора?
лол, пофиксил через это type SameArchetype :: a -> b -> Constraint type family SameArchetype a b where SameArchetype l r = (l ~ r) сигна теперь такая seqv :: (SameArchetype f fr, Error f ~ Error fr, Success f ~ v, Success fr ~ m) => f -> (v -> m) -> fr
Просто замени SameArchetype f fr на f ~ fr
Мда, я надеялся на немного другой результат
Обсуждают сегодня