gpt4 book ai didi

haskell - 模板 Haskell 可以生成多参数类型类实例吗?

转载 作者:行者123 更新时间:2023-12-04 16:35:12 24 4
gpt4 key购买 nike

Dec 的最新 (2.8.0.0) 定义具有以下实例构造函数:

InstanceD Cxt Type [Dec]

似乎只能实例化一种类型。有没有办法解决这个问题?

最佳答案

是的,支持多参数类型类。

有点令人困惑, Type参数引用整个实例头 , 而且,即使它不是真正的类型,它在语法上看起来也很像 Type 类型。被重复用于此目的。

因此,如果您要生成多参数 instance Foo Int Bool ,你需要使用“类型”Foo Int Bool ,例如这样构造:

(ConT (mkName "Foo") `AppT` ConT (mkName "Int")) `AppT` ConT (mkName "Bool")

这是一个完整的例子:
{-# LANGUAGE MultiParamTypeClasses, TemplateHaskell #-}

import Language.Haskell.TH

class Foo a b where
foo :: (a, b)

$(return [InstanceD [] (((ConT (mkName "Foo")) `AppT` ConT (mkName "Int")) `AppT` ConT (mkName "Bool"))
[ValD (VarP (mkName "foo"))
(NormalB (TupE [LitE (IntegerL 42), ConE (mkName "False")])) []]])

main = print (foo :: (Int, Bool))

关于haskell - 模板 Haskell 可以生成多参数类型类实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13331965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com