gpt4 book ai didi

haskell - 在 Haskell 中比较两个项的构造函数的一般方法

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

这个问题在这里已经有了答案:





Haskell - simple constructor comparison (?) function

(6 个回答)


4年前关闭。




给定某些数据类型的两个术语 t1 t2 ,是否有某种方法可以检查 t1 和 t2 是否以相同的构造函数开头,而无需对构造函数进行一些详尽的案例或模式匹配?就像如果我的类型是要么 a b,那么我想要

checkConst (Left x) (Left y) = True
checkConst (Right x) (Left y) = False
...

依此类推,而无需实际进行该模式匹配,并且以一种可推广到具有大约 10 个构造函数的其他类型的方式。有没有很好的方法来做到这一点?

最佳答案

您可能正在寻找 Data.Data 中可用的泛型功能。模块。如果您使用派生的 Data 定义数据类型例如,像这样:

{-# LANGUAGE DeriveDataTypeable #-}
import Data.Data
data Foo = Bar1 Int
| Bar2 String String
| Bar3 Double
deriving (Data)

然后您可以使用 toConstr 检索值的构造函数:
> toConstr (Bar1 1)
Bar1
> toConstr (Bar2 "hello" "there")
Bar2
>

这些是 Constr 类型的值可以比较是否相等,因此您可以定义:
checkConst :: (Data g) => g -> g -> Bool
checkConst x y = toConstr x == toConstr y

并得到:
> checkConst (Bar1 10) (Bar1 20)
True
> checkConst (Bar1 10) (Bar3 20)
False
>

关于haskell - 在 Haskell 中比较两个项的构造函数的一般方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47861648/

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