【发布时间】:2018-01-19 08:49:38
【问题描述】:
我正在尝试在我的程序中使用“何时”功能,因为我希望在某事为真时执行一个动作,如果不是真的则不执行。 我也可以通过使用 Maybe monad 来完成同样的事情,但这会使我的程序的其余部分变得混乱。
问题是当期望返回类型为 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
编辑: 我最初发布的代码中潜入了“打印”,这是我尝试过的东西,后来我将其删除。我可以使用 print,但我还需要使用 foreign.marshall 中的 unsafeLocalState,这是不可取的吗?在这种情况下,代码将变得相同,但具有 when hasRel (print $ unsafeLocalState (post addr ("dummy" := details)))
【问题讨论】:
-
那么,如果条件不满足,你希望结果是什么?如果使用
if…then…else编写,您的代码会是什么样子? -
print返回(),所以它应该适合。 Response ByteString 应该从哪里来? -
听起来你想要返回类型为
Maybe (IO (Response ByteString)),类似于if hasRel then Just (post addr ...) else Nothing。