【问题标题】:How can we match Haskell tuples to an Agda datatype?我们如何将 Haskell 元组匹配到 Agda 数据类型?
【发布时间】:2021-01-29 16:47:52
【问题描述】:

我想在 Agda 中使用 Haskell 代码,例如,类似于返回整数和字符串对列表的函数。

我看到了这个文档: https://agda.readthedocs.io/en/v2.6.1.1/language/foreign-function-interface.html

但我不知道如何将 Haskell 元组映射到 Agda 类型,因为例如在像这样的映射中

{-# COMPILE GHC APair = data ?????? #-}

我不知道怎么填????-s,因为我没有元组数据类型的定义。

但是,内置配对中也没有列出配对。

我应该如何进行?

【问题讨论】:

标签: haskell tuples ffi agda


【解决方案1】:

标准库在Foreign.Haskell.Pair (https://agda.github.io/agda-stdlib/Foreign.Haskell.Pair.html) 中执行此操作。相关代码是

record Pair (A : Set a) (B : Set b) : Set (a ⊔ b) where
  constructor _,_
  field  fst : A
         snd : B
open Pair public

{-# FOREIGN GHC type AgdaPair l1 l2 a b = (a , b) #-}
{-# COMPILE GHC Pair = data MAlonzo.Code.Foreign.Haskell.Pair.AgdaPair ((,)) #-}

在解释 Agda 类型中的宇宙级别时有一点麻烦,这些级别不会出现在 Haskell 对中。如果你不需要,这应该足够了:

data Pair (A B : Set) : Set where
  _,_ : A → B → Pair A B

{-# COMPILE GHC Pair = data (,) ((,)) #-}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    相关资源
    最近更新 更多