繁体   English   中英

如何找出哪些(具体)类型满足一组类型类约束?

[英]How can I find out which (concrete) types satisfy a set of typeclass constraints?

给定了一些类型类约束:

{-# LANGUAGE ConstraintKinds, MultiParamTypeClasses #-}
import Data.Array.Unboxed(Ix,IArray,UArray)

type IntLike a = (Ord a, Num a, Enum a, Show a, Ix a, IArray UArray a)

我怎样才能找出哪些类型满足IntLike ,即所有提到的约束共同

我可以将ghci的输出所需的信息拼凑在一起:info命令,然后通过调用(或使用ghci typecheck)来双重检查我的工作

isIntLike :: IntLike -> Bool
isIntLike = const True

在各种类型,例如isIntLike (3::Int)

有没有办法让ghci为我这样做?

我目前对具体类型感兴趣,但是不介意有一个更通用的解决方案,它也可以通过统一的上下文来实现聪明的东西!

社区维基回答基于以下评论:

您可以使用模板haskell执行此操作。

main = print $(reify ''Show >>= stringE . show).

这对于类型同义词不起作用 - 相反,reify返回表示类型同义词本身的AST,而不扩展它。 您可以检查作为约束的类型同义词,提取该类型同义词所包含的约束,并继续对其进行更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM