我对Haskell相当新,为了做得更好,我正在努力创建一个简单的Web服务器.我想说明我如何表示可扩展的页面,所以我的想法是让网页成为可渲染数据的列表(比如你如何制作一个在Java中实现某个接口的对象列表),其中Renderable是
class Renderable a where
render :: a -> IO String
Run Code Online (Sandbox Code Playgroud)
不幸的是,我了解到列表必须是具体类型,因此我只能列出一种可渲染数据.此外,似乎无法创建受类型类约束的数据,因此我无法创建类似RenderList数据的内容.我的临时解决方案是这样的:
myPage =
[render $ someData
,render $ someMoreData
,render $ someOtherData
...
]
Run Code Online (Sandbox Code Playgroud)
但这感觉很尴尬,使得类型类的使用没有任何好处,并且感觉应该有更好的方法.所以我想知道我可以采用哪些方法来重构我必须更清洁,更符合标准Haskell实践,并且仍然可以轻松扩展?
谢谢.
我遇到了Haskell中模糊类型的问题.我从以下开始:
module GameState
( GameState(..)
, GameStateMonad
, module Control.Monad.Trans
, module Control.Monad.Trans.State.Lazy
, Blank(..)
) where
import Control.Monad.Trans
import Control.Monad.Trans.State.Lazy
type GameStateMonad a b = StateT a IO b
class GameState a where
update :: Double -> GameStateMonad a ()
update deltaTime = return ()
draw :: GameStateMonad a ()
draw = return ()
getNextState :: GameState b => GameStateMonad a (Maybe b)
getNextState = return Nothing
isStateFinished :: GameStateMonad a Bool
isStateFinished = return True
-- This is …Run Code Online (Sandbox Code Playgroud)