gpt4 book ai didi

Haskell:如何为集合定义类型类?

转载 作者:行者123 更新时间:2023-12-04 05:07:58 29 4
gpt4 key购买 nike

这里的新手,苦苦挣扎。

我正在尝试为集合定义一个类型类。对于这种情况,它只需要“存在”的定义。 'exists' 将在一个集合项上使用一个集合和函数,然后返回
一个 bool 值。我如何在 Haskell 中定义它?

下面的方向是否正确?所以有类型类定义和一个
set with list 的实现,'exists' 现在返回 true ..

-- Set.hs --

class Set a b where

exists :: a -> (b -> Bool) -> Bool


-- ListSet.hs --

instance Set ListSet a where

exists a f = True

--

(结果:类 `Set' 的参数太多)

最佳答案

你可以这样做,有足够的扩展。至少,您将需要多参数类型类。但是,使用起来会很烦人:您需要在各处指定显式类型签名。解决它的一种方法是引入功能依赖项(使用另一个扩展):

class Set a b | a -> b where
exists :: a -> (b -> Bool) -> Bool

这就是说,如果您知道集合的类型,那么您也知道元素的类型。但是,有一种更简单的方法可以在没有任何扩展的情况下工作:
class Set f where
exists :: f a -> (a -> Bool) -> Bool

在这里,类型类涵盖了更高种类的类型,这是一个巧妙的技巧,如果你以前从未见过它,你很难自己想出它!

关于Haskell:如何为集合定义类型类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11508642/

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