如何从REPL检查给定的类型类约束是否满足?
如何在Haskell REPL中验证类型类约束是否满足
我在探索包含复杂类型与类型类实例的库时,希望通过REPL检查某类型类约束是否成立(前提是所有相关数据类型和实例均已在作用域内)。比如在rel8 1.5.0版本中,约束Table Expr (Expr Int, Expr Bool)是否成立?答案是否——因为Int缺少DBType实例,导致前提条件不满足。
以下是两种无效的解决方案:
1. 使用:kind!命令
:kind!仅能检查约束的格式是否合法,无法验证约束是否实际满足。示例代码:
ghci> :kind! (Table Expr (Expr Int, Expr Bool)) (Table Expr (Expr Int, Expr Bool)) :: Constraint = Table Expr (Expr Int, Expr Bool)
2. 使用:instances命令
该命令不适用于Table这类多参数类型类,且会返回所有相关实例,结果冗长冗余。示例代码:
ghci> :instances Expr instance Reifiable Expr instance Nullifiable Expr instance GRecordable Expr ghci> :instances (Expr Int, Expr Bool) instance [safe] NotNull (Expr Int, Expr Bool) instance [safe] Nullable (Expr Int, Expr Bool) instance Show (Expr Int, Expr Bool) instance GHC.Generics.Generic (Expr Int, Expr Bool)
内容的提问来源于stack exchange,提问作者danidiaz
相关产品推荐
相关产品推荐

