首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修复地区扩展中的类型变量

修复地区扩展中的类型变量
EN

Stack Overflow用户
提问于 2014-10-08 09:29:11
回答 1查看 116关注 0票数 3

考虑到这段代码

代码语言:javascript
复制
locale A =
  fixes foo :: "'a"

locale B = A +
  fixes bar :: "'a × 'a"

locale C' = A +
  fixes baz :: "'a"
begin
  sublocale B foo "(foo, baz)".
end

我得到了

代码语言:javascript
复制
Type unification failed

Failed to meet type constraint:

Term:  (foo, baz) :: 'b × 'a
Type:  'b × 'b

因此,伊莎贝尔似乎不明白bazfoo应该是同一类型的。有办法解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-08 10:11:02

问题在于您对locales、BC的声明。B的声明等价于以下内容

代码语言:javascript
复制
locale B = A foo for foo +
  fixes bar :: "'a * 'a"

区域设置导入只记住参数的名称,而不记住类型变量的名称。因此,由于尚未为foo指定类型,B参数的最一般类型如下:

代码语言:javascript
复制
 foo :: 'b
 bar :: 'a * 'a

您可以使用命令print_locale B看到这一点。同样的情况发生在locale C的声明中。

如果您希望foobar具有相同的类型,则必须在区域设置声明中将连接显式化。有两种方法可以做到这一点。

代码语言:javascript
复制
locale B = A foo
  for foo :: 'a
  +
  fixes bar :: "'a * 'a"

代码语言:javascript
复制
locale B = A +
  constrains foo :: 'a
  fixes bar :: "'a * 'a"
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26253538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档