【问题标题】:GHC-api and typechecking class constraintsGHC-api 和类型检查类约束
【发布时间】:2012-06-12 15:52:24
【问题描述】:

我正在尝试使用 ghc-api 构建一个简单的类似 ghci 的控制台。我已经到了可以使用exprType 提取Type 的表达式并评估它们的地步。还有一种简单的方法可以检查表达式的类型是否具有给定类的实例?

编辑:我正在寻找的功能似乎需要InstEnv,但我不知道在哪里可以找到它。

【问题讨论】:

    标签: haskell ghc ghc-api


    【解决方案1】:

    isInstance 方法可以满足您的要求。

    ghci 中的示例:

    > :set -XTemplateHaskell
    > import Language.Haskell.TH
    > $(stringE . show =<< (isInstance ''Functor . (: []) =<< [t| [] |]))
    "True"
    > $(stringE . show =<< (isInstance ''Show . (: []) =<< [t| Maybe Int |]))
    "True"
    $(stringE . show =<< (isInstance ''Show . (: []) =<< [t| (Int -> Bool) |]))
    "False"
    

    它的sig类型是

    isInstance :: Name -> [Type] -> Q Bool
    

    即你为类命名(使用''mkName 函数检索),然后传递类型以检查类(如果类是多参数类型,则需要多个类型班级)。然后它将在 Q monad 中返回 True 或 False。

    【讨论】:

    • 这很有希望,但我也想不出在 GHC monad 中运行 Q monad 的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2017-01-21
    相关资源
    最近更新 更多