You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell中~类型约束报Not in scope错误需添加什么编译pragma?

解决方案

你需要额外启用两个语言扩展即可编译成功:

  • GADTs:允许在数据构造器上附加类型约束,同时隐含启用类型相等约束所需的EqualityConstraints扩展
  • UnicodeSyntax:支持识别Unicode版本的类型相等运算符∼,如果你将代码中的∼替换为ASCII版的~,则不需要启用该扩展

修改后的完整代码(保留Unicode运算符版)

{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE UnicodeSyntax #-}

data Expr_ a
    = (a ∼ Int) => LitInt_ Int
    | (a ∼ Bool) => LitBool_ Bool
    | (a ∼ Int) => Add_ (Expr_ Int) (Expr_ Int)
    | (a ∼ Bool) => Not_ (Expr_ Bool)
    | If_ (Expr_ Bool) (Expr_ a) (Expr_ a)

修改后的完整代码(ASCII运算符版,无需UnicodeSyntax)

{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE GADTs #-}

data Expr_ a
    = (a ~ Int) => LitInt_ Int
    | (a ~ Bool) => LitBool_ Bool
    | (a ~ Int) => Add_ (Expr_ Int) (Expr_ Int)
    | (a ~ Bool) => Not_ (Expr_ Bool)
    | If_ (Expr_ Bool) (Expr_ a) (Expr_ a)

原理说明

GHC默认不开启GADT扩展,因此不支持在数据构造器前绑定类型约束,也默认不识别类型相等运算符~/∼。开启GADTs后即可同时满足这两个需求,Unicode运算符的识别则需要单独开启UnicodeSyntax扩展。

内容的提问来源于stack exchange,提问作者mhwombat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:39:03