對于 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] -> IO [Picture]
其中為子彈物件生成圖片的函式是:
render :: Bullet -> IO Picture
有沒有辦法創建我需要的功能。我一直在用單子和函子在紙上玩弄,但找不到完成這項作業的方法。非常感謝任何幫助!
uj5u.com熱心網友回復:
您可以使用traverse :: (Traversable t, Applicative f) => (a -> f b) -> t a -> 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)
uj5u.com熱心網友回復:
您可以mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> 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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/532459.html
