gpt4 book ai didi

haskell - 如何进一步约束 Haskell 中的现有类型类

转载 作者:行者123 更新时间:2023-12-02 18:37:03 25 4
gpt4 key购买 nike

有没有办法进一步限制现有类型类的上下文?

例如,类型类Functor:

class Functor f where
fmap :: (a -> b) -> f a -> f b

此类定义不强制 ab 成为 Show 的元素。而且这个类型的类是我自己包含的类,所以我不能影响类的定义。以后是否仍然可以仅允许 ab 成为 Show 的成员?

最佳答案

不直接。如果不更改源代码并重新编译,则无法更改类的定义。对于标准库中定义的类,这会导致大量代码破坏,因此不是一个现实的选择。

但是,您可以包装该类并添加所需的约束,

class Functor f => ShowFunctor f where
smap :: (Show a, Show b) => (a -> b) -> f a -> f b
smap f = fmap f

然后使用该类而不是原来的类。

但也许您不需要额外的类,并且对于您的应用程序来说,在顶层定义 smap 并简单地使用它而不是 fmap 就足够了,

smap :: (Functor f, Show a, Show b) => (a -> b) -> f a -> f b
smap = fmap

关于haskell - 如何进一步约束 Haskell 中的现有类型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9598637/

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