Как вызвать функцию и вернуть другое значение в haskell? (Без монад) - PullRequest
2 голосов
/ 10 февраля 2012

У меня проблемы с выяснением, возможно ли это.Любые указатели были бы потрясающими

Я не уверен в точном синтаксисе, но что-то вроде

m = 3
d = putStr "d"
f = d ; m

Так, чтобы он вызывал функцию d и возвращал значение в mне будучи Maybe m?

РЕДАКТИРОВАТЬ:

То, что я ищу, больше похоже на это?

eval s = s
m = 3
f = (eval s) ; m

Ответы [ 2 ]

6 голосов
/ 10 февраля 2012

Если вы вызываете функцию, заключенную в монаду (в данном случае IO), вы также должны быть в монаде IO.Таковы правила монад - никогда их не нарушать.

m :: Int
m = 3

d :: IO ()
d = putStr "d"

f :: IO Int
f = do d -- Teehee, doodie.
       return m
3 голосов
/ 10 февраля 2012

Если вы хотите отладить вашу программу printf -подобным способом, используйте модуль Debug.Trace.

В противном случае см. Ответ Кларка Гебеля выше - вы не можете получить чистые (не IO) значения из функции IO, а putStr возможно только в IO функциях.


¹ на самом деле иногда можно, но это сложный вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...