【问题标题】:Is it possible to compare two types, if one is assignable from the other?如果一种可以从另一种分配,是否可以比较两种类型?
【发布时间】:2014-08-30 08:16:49
【问题描述】:

假设我有两个types

t1 <- [t| (Functor f) => (a -> b) -> f a -> f b |]
t2 <- [t| (Int -> Char) -> [Int] -> [Char] |]

是否可以在 Template Haskell 中确定t1 的表达式也可以是t2? (我自己没有实现类型统一。)

【问题讨论】:

  • 如果有可能你必须使用新的类型化模板haskell的东西,但我对此一无所知。您可能可以通过生成一些死代码来进行某种编译时断言,例如:a = (undefined :: (Functor f) =&gt; (a -&gt; b) -&gt; f a -&gt; f b); b :: (Int -&gt; Char) -&gt; [Int] -&gt; [Char]; b = a

标签: haskell types type-conversion template-haskell


【解决方案1】:

正如 jberryman 在 cmets 中所说,您可以生成强制类型检查器统一这两种类型的代码。但是,您不能进入类型检查器来实际检查自己并根据结果进行分支。在 TH 扩展阶段,您根本无法正确访问完整的类型检查器环境。

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 2020-09-03
    • 2022-11-18
    • 2014-12-13
    相关资源
    最近更新 更多