Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, barn_czn, Вы писали:
_>>У меня вполне конкретный вопрос по Хаскелю, на который не могу пока найти ответа. _>>См. код:
_>>f :: a->a _>>-- имплементация не важна
_>>toString:: a->String _>>toString (f x) = "Applied f" _>>toString _ = "any"
_>>То что toString не компилится я уже понял почему, патерн матчинг не такой мощный как я ожидал, и этому есть объяснение. Но цель функции toString я думаю вы поймете. _>>Я хочу, используя патерн-матчинг, покапаться в дереве выражения на входе. _>>Как мне это сделать?
G>Для того чтобы копаться в дереве выражения надо его создать. Вызов функции != дерево выражения.
А разве я его не создаю строя цепочку вызовов? Где же все то что обещали в Хаскеле — ленивость вычислений, все есть функция.
Вот я и хочу воспользоватся ленивостью Хаскеля и покапатся в другой функции.
Я согласен изменить сигнатуру на
toString:: (a->a)->String
Но я точно не хочу внутри ФЯ строить еще одну объектную модель выражений и деревьев.