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