Здравствуйте, мне было интересно, как вы можете развернуть значение позже в монаде IO? Если a<-expression
связывает результат с a
, то нельзя ли использовать (<-expression)
в качестве параметра для данного метода, например: method (<-expression)
где метод method
принимает результат оценки?
Код
let inh=openFile "myfile" WriteMode
let outh=openFile "out.txt" WriteMode
hPutStrLn (<-outh) ((<-inh)>>=getLine)
Я не вошел в главу Monad
, только основные блоки <-
и do
, но я полагаю, что это связано с монадами. Затем, если я хочу передать result
, если оценка hGetLine
не может быть, я использую что-то вроде:
(<-expression)=>>hGetLine
<-
это не функция, это часть синтаксиса. Это синтаксический сахар для вызовов(>>=)
. Вот почему вы не можете использовать его таким образом. Если вы еще не хотите использовать этиMonad
методы напрямую, как насчетinh <- openFile ...; outh <- openFile ...; r <- hGetLine inh; hPutStrLn outh r
вместоlet
? - person David Young   schedule 24.07.2018variable<-expression
нельзя использовать без левого аргумента. Так что я должен войти в главуmonad
. Так что я могу использовать это так?hPutStrLn (=<<inh) ((=<<outh)>>=hGetLine
. - person Bercovici Adrian   schedule 24.07.2018do
-нотации. начните с нотации do. - person Will Ness   schedule 24.07.2018<-
иdo
по определению относятся к монадам (без учета расширенияApplicativeDo
). Я мягко предлагаю прочитать вашу главу о монадах. - person chepner   schedule 24.07.2018