【问题标题】:Haskell Datatypes with unknown types具有未知类型的 Haskell 数据类型
【发布时间】:2017-12-15 06:29:29
【问题描述】:

对于一个作业,给出了以下代码

-- 2. Index

class Index i where
  findEntry :: Eq k => k -> i k -> Maybe Entry
  empty     :: Eq k => i k
  singleton :: Eq k => k -> Entry -> i k
  (<+>)     :: Eq k => i k -> i k -> i k

-- a. Complete the definition of Assoc
data Assoc k
  = MkAssoc [(k,Entry)]
  deriving (Eq,Show)

-- b. Complete the instance of Index for Assoc
instance Index Assoc where

我现在完全卡在问题 2.b 上。如何使空和 findEntry 和其他东西?索引中的“k”来自哪里?为什么某些函数的输出是(i k)?那甚至都不是类型。

【问题讨论】:

  • k 是与Assoc 绑定的k 类型参数,所以k 是“key”类型。

标签: haskell types functional-programming


【解决方案1】:

class Index i 中的 i 代表一种类型为 * -&gt; * 的构造函数。也就是说,i 可以是 Maybe[]IO。更重要的是i也可以是Assoc

请注意,i 本身不是类型,而是类型构造函数,就像 Assoc 本身不是类型。相反,i k 是一个类型,就像 Assoc k 是一个类型。

你需要编写的实例有以下方法需要定义:

instance Index Assoc where
  findEntry :: Eq k => k -> Assoc k -> Maybe Entry
  empty     :: Eq k => Assoc k
  singleton :: Eq k => k -> Entry -> Assoc k
  (<+>)     :: Eq k => Assoc k -> Assoc k -> Assoc k

您现在应该可以填写实际定义了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-11
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多