gpt4 book ai didi

haskell - 处理多个现有独立数据定义的函数

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

我有多个数据定义,举个简单的例子:

data Fruit = Apple String Bool
| Cherry String String
| Grape String

data Vegetable = Carrot String
| Onion Bool String
| Tomato String String

现在我想要一个可以处理两种类型的函数,我尝试了这样的方法:

f :: a -> String
f (Carrot s) = s
f (Apple s b) = s
f (Onion b s) = s
...

但这不起作用,因为预期类型 a 无法与类型 Carrot 匹配。我想知道应该如何定义一个函数,该函数可以借助模式匹配或其他技术来处理多个现有的独立数据定义。

最佳答案

实现您想要做的事情的一种方法是使用涉及两种食物的新数据类型,因此,我们称其为食物,它将是:

data Food = Veg Vegetable | Fr Fruit deriving Show

data Fruit = Apple String Bool
| Cherry String String
| Grape String deriving Show

data Vegetable = Carrot String
| Onion Bool String
| Tomato String String deriving Show


f :: Food -> String
f (Veg v) = fVeg v
f (Fr f) = fFruit f

fVeg (Carrot s) = s
fVeg (Onion b s) = s
fVeg (Tomato s1 s2) = s1 ++ s2

fFruit (Apple s b) = s
...
...

f $ Veg $ Onion True "friend"
=> "friend"

关于haskell - 处理多个现有独立数据定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47993949/

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