当前位置: 首页 > 知识库问答 >
问题:

在Haskell中有解决类型同义词的方法吗?

凌昕
2023-03-14

当使用type创建类型同义词时,GHC/GHCI在显式使用时将使用它而不是原始类型,但绝不会尝试从推断的类型向后工作到匹配的同义词。获取一个类型的最“抽象”的同义词对于学习复杂的应用程序和库非常方便,这些应用程序和库定义了单子堆栈的同义词,也可能定义了同义词的同义词。

共有1个答案

姬正文
2023-03-14

不是答案,而是问题。类型同义词通常用于在“高级代码”中很好地命名类型,但是一旦您将这些类型传递到较低级别/帮助程序代码中(这些代码是根据更具体的类型定义的),系统应该如何跟踪应用哪一个同义词呢?请考虑以下内容:

type Title = String
type Name  = String

capitalise :: String -> String

my_title = "Mayor" :: Title

shouted_title = capitalise my_title :: ???

typechecker如何知道进入heleper函数capitalise的字符串在概念上与从capitalise出来的字符串是相同的类型?在存在多个类型别名的情况下,类型检查器应该如何选择使用哪一个?

 类似资料:
  • 模板Haskell能找出类型类中声明的关联类型同义词的名称和/或声明吗?我希望能做我想做的事情,但它似乎没有提供所有必要的信息。它用于获取函数类型签名: 但是,将关联的类型同义词添加到类中不会导致输出中的更改(直到重命名):

  • 问题内容: 我是C ++ / Java程序员,在日常编程中碰巧使用的主要范例是OOP。在某个线程中,我读到一条评论,即Type类本质上比OOP更直观。有人可以用简单的词来解释类型类的概念,以便像我这样的OOP家伙可以理解吗? 问题答案: 首先,我总是非常怀疑这种程序结构更直观。编程是违反直觉的,并且总是会因为人们自然而然地根据特定情况而不是一般规则来思考。要更改此设置,需要培训和实践,也称为“编程

  • 我正在编写一个实现一些程序分析的Java程序。作为这一点的一部分,我想要一种类型来表示我正在分析的程序中的“值”。在我看来,值只是整数。然而,我宁愿不在代码中使用/类型,因为/不是一个非常描述性的名称。我宁愿写。然后我想写 然后完成。但这不起作用,因为<code>Integer</code>是最终类。因此,我当前的解决方案是给类一个字段,然后手动实现所有各种标准方法: 当我真的只是在寻找行为类似于

  • 假设我们有一个带有签名的函数 是否有可能实施一个约束来确保a和b是不同的?那就是 这个问题的目的是了解更多关于Haskell的信息,并可能解决我面临的一个设计问题。如果a==b,我的特殊情况是没有意义的,所以我想在编译器级别禁止这样做。我可能会用一个完全不同的设计来解决这个问题,但这不仅仅是现在的重点--潘多拉盒子已经打开,我想知道类型级别上的等式约束是否可能。

  • 我正在为一个系统建模,该系统有一个创建资源的操作和其他消耗该资源的操作。然而,一个给定的资源只能被消耗一次——有没有一种方法可以保证在编译时这样做? 具体来说,假设第一个操作烘焙蛋糕,还有另外两个操作,一个用于“选择吃”蛋糕,另一个用于“选择吃蛋糕”,我只能做其中一个。 通过在我们使用蛋糕后在蛋糕上设置一个标志,很容易在运行时强制执行不保留已经吃过的蛋糕(反之亦然)的限制。但是有没有办法在编译时强

  • 我想知道GHCi中(或其他地方)是否存在将类型同义词和族扩展出任意类型表达式的功能。