gpt4 book ai didi

Haskell:类型类可以定义类型(ala 类型特征)

转载 作者:行者123 更新时间:2023-12-02 06:25:42 24 4
gpt4 key购买 nike

是否可以让类型成为类型类的一部分?像这样的东西:

class KeyTraits v where
keyType :: *
key :: v -> keyType

data TableRow = { date :: Date, metaData :: String, value :: Int }

instance KeyTraits TableRow where
keyType = Date
key = date

这些“类型级”函数可以在其他地方使用吗?例如:

-- automatically deduce the type for the key, from the value type, using
-- the typeclass
data MyMap v = { getMap :: (KeyTraits v) => Map (keyType) v }

我可能做了一些完全错误的事情,但我基本上希望能够定义像上面这样的类型关系(例如,某些值可能已经拥有可以用作键的数据)。如果这是不可能的,或者很困难,你能建议一个更好、更惯用的设计吗?

谢谢!

最佳答案

看看type families .

{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE RankNTypes #-}

class KeyTraits k where
type KeyType k :: *
key :: v -> KeyType k

data TableRow = TableRow { date :: Date, metaData :: String, value :: Int }

instance KeyTraits TableRow where
type KeyType TableRow = Date
key = date

data MyMap v = MyMap { getMap :: (KeyTraits v) => Map (KeyType v) v }

关于Haskell:类型类可以定义类型(ala 类型特征),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17398784/

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