我们如何将 Haskell 元组匹配到 Agda 数据类型?

How can we match Haskell tuples to an Agda datatype?

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

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

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

这样的映射中
{-# COMPILE GHC APair = data ?????? #-}

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

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

我该如何进行?

标准库在 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 类型中的 Universe 层级需要一些小改动,这些层级没有出现在 Haskell 对中。如果您不需要,这应该足够了:

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

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