小编tyd*_*otg的帖子

处理Haskell中第三方库的数据类型的最佳实践?

我刚刚进入我的第一个真正的Haskell大小项目(一个Web应用程序),我开始遇到来自第三方库的类型泄漏我的代码的问题.这是一个简单的例子:

我的Parser模块导入Test.Parsec,并导出一个parseConfig返回的函数()Either ParseError DbConfig,其中ParseErrorParsec库中DbConfig定义的数据类型(是我的应用程序的自定义数据类型,为简洁起见未显示).

-- Parser.hs
module Parser where

import Text.Parsec

parseConfig :: String -> Either ParseError DbConfig
parseConfig = parse ...
Run Code Online (Sandbox Code Playgroud)

后来,我想使用我的parseConfig功能,但为了使用它,我必须Text.Parsec再次导入,以便我可以访问该ParseError类型.

-- Api.hs
module Api where

import Parser
import Text.Parsec

getConfigFromBody :: Object -> Either ParseError DbConfig
getConfigFromBody = parseConfig . (...)
Run Code Online (Sandbox Code Playgroud)

这不仅是管理进口的麻烦,而且是关注点的差异分离,因此我知道这不是最好的方法.我的问题是,管理这个问题的最佳做法是什么?制作类型同义词是理想的吗?

type ConfigParseError = ParseError

parseConfig :: String -> Either ConfigParseError DbConfig
parseConfig = parse ... …
Run Code Online (Sandbox Code Playgroud)

haskell types

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

标签 统计

haskell ×1

types ×1