【问题标题】:Trouble with IO objects HaskellIO对象问题Haskell
【发布时间】:2022-11-14 03:28:38
【问题描述】:

对于 uni,我有这个项目,我需要在 haskell 中编写一个简单的游戏。现在我面临以下问题:

instance Renderable Player where
  render (MkPlayer pos rad bults _) = do playerpic  <- displayimg pos rad "./images/player.bmp"
                                         bulletpics <- ...
                                         return $ pictures (playerpic:bulletpics)

... 我需要一个函数f :: [Bullet] -&gt; IO [Picture]

为项目符号对象生成图片的函数是:

render :: Bullet -> IO Picture

有没有办法创建我需要的功能。我一直在用单子和函子在纸上玩弄,但找不到完成这项工作的方法。非常感谢任何帮助!

【问题讨论】:

    标签: function haskell io rendering gloss


    【解决方案1】:

    您可以使用traverse :: (Traversable t, Applicative f) =&gt; (a -&gt; f b) -&gt; t a -&gt; f (t b)。在您的代码中,如下所示:

    instance Renderable Player where
      render (MkPlayer pos rad bults _) = do playerpic  <- displayimg pos rad "./images/player.bmp"
                                             bulletpics <- traverse render bults
                                             return $ pictures (playerpic:bulletpics)
    

    【讨论】:

      【解决方案2】:

      您可以为此使用mapM :: (Traversable t, Monad m) =&gt; (a -&gt; m b) -&gt; t a -&gt; m (t b)

      instance Renderable Player where
        render (MkPlayer pos rad bults _) = do
          playerpic  <- displayimg pos rad "./images/player.bmp"
          bulletpics <- mapM render bults
          return $ pictures (playerpic:bulletpics)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-02
        • 2016-03-16
        • 1970-01-01
        • 1970-01-01
        • 2019-03-28
        • 2020-02-03
        • 2012-03-28
        • 1970-01-01
        相关资源
        最近更新 更多