gpt4 book ai didi

haskell - 如何针对类型类值进行模式匹配?

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

假设我在 Haskell 中定义了一个类型类,

class (Bool a) where
false :: a
true :: a

为了为任何 Bool 定义通用的 not 运算,需要对其潜在值进行模式匹配:

not :: Bool a => a → a
not true = false
not false = true

但是这不能编译。我怎样才能让它工作?

最佳答案

您无法匹配这样的类型类值。类型类对实际的底层类型进行抽象,而模式匹配将公开它。

但是,您仍然可以使用 ViewPatterns 获得相同的行为和一些不错的语法。扩大。这个想法是包含一个函数,该函数接受您的抽象值并为您提供代表结构 View 的具体类型的值:

class (Bool a) where
true :: a
false :: a
asBool :: a -> Bool

现在您可以在模式匹配中使用 asBool 函数作为 View 模式:

not :: Bool a => a -> a
not (asBool -> True) = false
not (asBool -> False) = true

但是,请注意,这可能会导致 asBool 被计算两次,如果它隐藏了昂贵的计算,这可能会成为一个问题。

关于haskell - 如何针对类型类值进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28998729/

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