Я пытаюсь использовать функцию «когда» в своей программе, потому что я хочу, чтобы действие выполнялось, если что-то верно, а не если это не так. Я мог бы сделать то же самое, используя монаду Maybe, но это загромождает остальную часть моей программы.
Проблема в том, что когда ожидается, что тип возвращаемого значения будет IO(), но я хочу, чтобы он (или моя собственная версия) работал для IO (Response ByteString)
Это мой код функции:
mayNotifyDs :: Bool -> String -> ByteString -> IO (Response ByteString)
mayNotifyDs hasRel specName details =
when hasRel (post addr ("dummy" := details))
where addr = "http://127.0.0.1:8082/dummydir/" ++ specName
edit: «Печать» пробралась в код, который я изначально опубликовал, это было то, с чем я экспериментировал, и с тех пор я его удалил. Я могу использовать печать, но тогда мне также нужно использовать unsafeLocalState из Foreign.marshall, а это не рекомендуется, не так ли? Код в этом случае будет таким же, но с when hasRel (print $ unsafeLocalState (post addr ("dummy" := details)))
if…then…else
? - person leftaroundabout   schedule 19.01.2018print
возвращает()
, так что должно подойти. Откуда должна появиться байтовая строка ответа? - person nnnmmm   schedule 19.01.2018Maybe (IO (Response ByteString))
с чем-то вродеif hasRel then Just (post addr ...) else Nothing
. - person hnefatl   schedule 19.01.2018