【发布时间】:2019-05-09 09:06:21
【问题描述】:
我正在使用 Gloss 创建游戏。 我有这个功能:
block :: IO (Maybe Picture)
block = loadJuicyPNG "block.png"
如何获取这个 IO(Maybe Picture)并将其变成图片?
【问题讨论】:
-
从技术上讲,您有一个
IO操作,而不是一个函数。您调用loadJuicyPNG,它会返回一个IO操作,当执行该操作时,可能会导致Picture。 -
一旦你在
IOmonad 中工作,你(通常)并不打算摆脱它。无论您想对生成的Picture(如果有)应用什么操作,都应该在IOmonad 中应用。也许你应该在你的问题中澄清你想用那张图片做什么...... -
顺便说一句,在这种情况下,您可能还对 monad 转换器感兴趣,例如
MaybeT IO Picture。 A good read here -
一个
IO (Maybe Picture) -> Picture类型值不能存在,但IO (IO (Maybe Picture)) -> IO Picture可以。 -
@WillNess
dontDoThis :: IO (Maybe Picture) -> PicturedontDoThis = fromJust . unsafePerformIO。从技术上讲,它可以存在;这几乎可以肯定是个坏主意。
标签: haskell gloss juicy-pixels