避免在Haskell中使用taglessfinal的样板代码
创始人
2024-12-17 06:00:25
0次

Tagless final是一种在Haskell中实现抽象类型类的方式。然而,在编写大型程序时,它可能会导致代码重复和不必要的样板代码。下面介绍一个解决这个问题的方法:

1.将共享代码提取为行为类型类

将共享代码提取为一个类型类,该类型类定义一组通用的行为函数。例如:

class Monad m => DbRepository m where
  save :: Entity -> m ()
  delete :: Entity -> m ()
  getById :: Id -> m (Maybe Entity)
  getAll :: m [Entity]

2.为每个类型实现行为类型类

为每个数据类型实现行为类型类,例如:

data RedisDb = RedisDb

instance DbRepository RedisDb where
  save entity = -- save to Redis
  delete entity = -- delete from Redis
  getById id = -- get from Redis
  getAll = -- get all from Redis

data PostgresDb = PostgresDb

instance DbRepository PostgresDb where
  save entity = -- save to Postgres
  delete entity = -- delete from Postgres
  getById id = -- get from Postgres
  getAll = -- get all from Postgres

3.将类型实例化并注入依赖项

现在,您可以在其他模块中使用这些类型,并将它们作为参数传递给函数。例如:

getUser :: (DbRepository m) => Id -> m (Maybe User)
getUser id = do
  maybeEntity <- getById id
  return $ case maybeEntity of
    Just entity -> Just $ entityToUser entity
    otherwise -> Nothing

getUserFromRedis :: RedisDb -> Id -> Maybe User
getUserFromRedis redis id = runReader (getUser id) redis

getUserFromPostgres :: PostgresDb -> Id -> Maybe User
getUserFromPostgres postgres id = runReader (getUser id) postgres

这种方法有助于避免tagless final中的样板代码,并允许您在程序中使用多种实现。

相关内容

热门资讯

一分钟了解!!wpk辅助软件,... 本地部署 AI 黑科技工具迎来新版本,不用上传文件到云端就能完成wpk辅助软件解析、 AI 处理、w...
技术分享!如何下载wpk透视版... 『标题:当前标题』主打赛后复盘的 AI 游戏攻略黑科技走红,对局总结能力开挂。上传对局回放或者战绩截...
解密教程!wepoker免费辅... wepoker免费辅助器AI 游戏攻略黑科技上线本地缓存功能,离线查阅能力开挂。提前下载对应游戏攻略...
记者揭秘!!wpk透视工作室,... 一款 AI 游戏攻略黑科技工具上线,查攻略效率直接开挂。它整合版本更新、装备搭配、BOSS 打法、牌...
解密教程!wepokerplu... 您好,解密教程!wepokerplus开挂,德普之星可以开挂吗平台(切实有透视)这款游戏可以开挂的,...
玩家必看!德普之星辅助工具如何... 本地部署 AI 黑科技工具迎来新版本,不用上传文件到云端就能完成德普之星辅助工具如何打开解析、 AI...
教你攻略!wepoker透视脚... 您好,教你攻略!wepoker透视脚本免费使用视频,微扑克透视开挂下载(起初是有透视挂)这款游戏可以...
技巧知识分享!有哪些免费的wp... AI 黑科技赛道又上新,这款智能处理工具堪称效率开挂,专门面向短视频创作者打造。它打通脚本撰写、AI...
终于懂了!wpk真的有透视嘛,... 终于懂了!wpk真的有透视嘛,WPK透视辅助下载(固有是有辅助器)AI 是一款可以让一直输的玩家修复...
今日重大通报!wepoker私... 今日重大通报!wepoker私局辅助,德普之星透视插件(其实真的是有辅助挂)AI 智能体黑科技再上新...