【发布时间】:2015-03-29 02:18:08
【问题描述】:
我不确定这是否可能,但我希望能够执行一个返回值的 IO 操作,如果它被分配给一个变量,那么它会抑制特定的 IO 操作(或者当,任何动作,我猜,它不一定是 IO 动作)。
这是我遇到的具体问题:
当我这样做时:
renderDrawable drawable
我希望它调用特定函数 (drawArrays)。
赋值给变量时,比如:
d <- renderDrawable drawable
我希望抑制该特定功能。
现在,这似乎是一个遥远的目标,但有可能吗?我猜,类似于 mapM_/foldM_ 的东西是理想的。
谢谢!
【问题讨论】:
-
“被压制”是什么意思?
-
最接近此的方法是区分返回类型,以便在返回
IO ()时执行某些操作,而在返回IO TypeOfd时执行其他操作。然而,这需要一个类型类,即使这样也可能需要调用者代码中的一些类型注释。那么,为什么不直接定义两个不同的函数呢? -
也许更详细地描述你试图从更高层次的角度实现的目标。出于充分的理由,您所要求的在 Haskell 中是不可能的,但可能还有其他更好的方法。
-
我认为您所要求的内容在任何其他语言中也不可能,如果我理解正确的话,这真的很奇怪......
-
是的,我不认为是这样,但有几件事让我对 Haskell 的能力感到惊讶。从本质上讲,我想要的是一个 if 语句来确定我是否调用一个函数,基于原始函数的调用方式,如果这有意义?
标签: haskell io return variable-assignment