相关疑难解决方法(0)

在StateT中组合多个状态

我正在编写一个作为守护进程运行的程序.要创建守护程序,用户为每个必需的类提供一组实现(其中一个是数据库)所有这些类的函数都具有表单的类型签名StateT s IO a,但s每个类都有所不同.

假设每个类都遵循以下模式:

import Control.Monad (liftM)
import Control.Monad.State (StateT(..), get)

class Hammer h where
  driveNail :: StateT h IO ()

data ClawHammer = MkClawHammer Int -- the real implementation is more complex

instance Hammer ClawHammer where
  driveNail = return () -- the real implementation is more complex

-- Plus additional classes for wrenches, screwdrivers, etc.
Run Code Online (Sandbox Code Playgroud)

现在我可以定义一条记录,表示用户为每个"槽"选择的实现.

data MultiTool h = MultiTool {
    hammer :: h
    -- Plus additional fields for wrenches, screwdrivers, etc.
  } …
Run Code Online (Sandbox Code Playgroud)

state haskell

16
推荐指数
3
解决办法
2240
查看次数

标签 统计

haskell ×1

state ×1