小编Ter*_*iol的帖子

Haskell - 类型类的实例列表

我对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 typeclass

11
推荐指数
2
解决办法
2708
查看次数

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)

haskell

1
推荐指数
1
解决办法
3488
查看次数

标签 统计

haskell ×2

typeclass ×1