yat*_*975 10 haskell typeclass ghci
给定了一些类型类约束:
{-# 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)
Run Code Online (Sandbox Code Playgroud)
我怎样才能找出哪些类型的满足IntLike,即所有上述约束联合?
我可以把ghci :info命令输出所需的信息拼凑起来,然后通过调用(或者使用ghci typecheck)来重复检查我的工作
isIntLike :: IntLike -> Bool
isIntLike = const True
Run Code Online (Sandbox Code Playgroud)
在各种类型,例如isIntLike (3::Int).
有没有办法让ghci为我这样做?
我目前对具体类型感兴趣,但是不介意有一个更通用的解决方案,它也可以通过统一的上下文来实现聪明的东西!
社区 Wiki 基于评论的回答:
您可以使用模板 haskell 来完成此操作。
main = print $(reify ''Show >>= stringE . show).
Run Code Online (Sandbox Code Playgroud)
这不适用于类型同义词 - 相反,reify 返回表示类型同义词本身的 AST,而不扩展它。您可以检查作为约束的类型同义词,提取该类型同义词所包含的约束,然后继续具体化这些约束。
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |