gpt4 book ai didi

haskell - 检查两个值是否具有相同的头构造函数

转载 作者:行者123 更新时间:2023-12-01 22:27:13 26 4
gpt4 key购买 nike

我希望能够编写一个函数来检查两个值是否已使用相同的头构造函数构建。该功能:

  • 数据类型声明的大小不应呈线性

  • 如果数据类型扩展,应该继续工作

例如这并不令人满意(它是线性的,如果我添加任何额外的构造函数,包罗万象的函数将使函数无效):

data E = A Int | B String | C

sameCons :: E -> E -> Bool
sameCons t u = case (t, u) of
(A{}, A{}) -> True
(B{}, B{}) -> True
(C{}, C{}) -> True
_ -> False

在 OCaml 中 it is possible使用 Obj 模块中的不安全函数来做到这一点。我们可以在 Haskell 中做类似的事情(特定于 ghc 的解决方案也可以)吗?

最佳答案

如果你愿意导出Data那么你就可以开始了。

{-# LANGUAGE DeriveDataTypeable #-}

import Data.Data

data E = A Int | B String | C deriving (Typeable, Data)

sameCons :: E -> E -> Bool
sameCons x y = toConstr x == toConstr y

ghci> sameCons (A 1) (A 3)
True
ghci> sameCons (A 1) (C)
False

关于haskell - 检查两个值是否具有相同的头构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43944044/

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