Здравствуйте, haskell_beginner, Вы писали:
А>Ну не может он вывести какой тип будет у newX! Исправить можно двумя способами:
А>1) добавить {-# LANGUAGE NoMonomorphismRestriction #-}
Спасибо, сработало.
Я правильно понимаю, что сейчас ему недостаточно, что у newX будет "какой-то тип, принадлежащий к классу EX"?
А>2) переписать по-нормальному
А как? Я пытаюсь получить поведение, аналогичное интерфейсам. Конкретная задача — сделать работу с символьными выражениями
начал примерно с этого:
{- Symbolic expression -}
class (EX a) where
{- Enumerate/edit subexpressions -}
visit :: forall b c d. (EX b, EX c, EX d) => a -> (b -> Maybe c) -> d
{- Binary op type -}
data T2 = T2_ADD | T2_SUB
{- Binary op -}
data EX2 = forall a b. (EX a, EX b) => EX2 a b T2
instance EX EX2 where
visit (EX2 left right t) visitor = let newLeft = visitor left {- тут вылезает такая же ошибка -}
...