【问题标题】:Haskell no data constructors for type synonymHaskell 没有类型同义词的数据构造函数
【发布时间】:2016-03-25 20:46:36
【问题描述】:

我已经定义了一个带有构造函数的 haskell 数据类型和它的类型同义词。我无法使用它的数据构造函数。

类型定义:

module BinaryTreeModule(BinaryTree,..) where
data BinaryTree a = Empty | Node (BinaryTree a) a (BinaryTree a)

键入同义词:

import BinaryTreeModule(BinaryTree)
type BST = BinaryTree

用法:

insert :: a -> BST a -> BST a
insert _ Empty = ...
insert _ Node .. = ...

我收到一条错误消息,提示找不到 Empty 和 Node 构造函数。

我还在不同的文件中定义了它们。如果 BST 只是 BinaryTree 的同义词,它们的构造函数不应该相同吗?

还有更好的方法将 BinaryTree 类型“继承”到不同的类型吗?类型类在这里是正确的解决方案吗?

编辑:添加了我在文件之间导入的方式

【问题讨论】:

  • 您是否在 BinaryTree 模块中同时公开了 EmptyNode 构造函数?
  • 最重要的是,您是否也在导入它们import MyModule(BinaryTree)import MyModule(BinaryTree(..)) - 另请注意import MyModule(BST) 与第一个相同!
  • 好的,我正在像import MyModule(BinaryTree) 一样导入。如何导入数据构造函数,即 BinaryTree(..)
  • 感谢您的帮助!
  • 类型同义词在 Haskell 中的实用性相当有限。在lenspipes 中存在一些特殊情况,并且可能在其他地方它们很有价值,但在典型情况下,您可能不应该使用它们。 GHC 的类型族通常更有用,但它们是更高级的功能。

标签: haskell types


【解决方案1】:

@Carsten 发表评论后,我意识到我没有从模块中导入构造函数

import BinaryTreeModule(BinaryTree(Empty,Node)) 修复了问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多