Re[3]: [Haskell] Existential Types - код не компилируется
От: awk  
Дата: 11.02.10 12:54
Оценка:
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.