gpt4 book ai didi

haskell - 可以用于一种简单的多态性吗?

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

我尝试编写一个简单的函数,它接受一个类型(可能由两种不同的类型参数化),如果它是 Left 则做一件事,如果它是 Right 则做另一件事。下面的代码,

someFunc :: (Show a, Show b) => Either a b -> IO ()
someFunc (Left x) = print $ "Left " ++ show x
someFunc (Right x) = print $ "Right " ++ show x

main = do
someFunc (Left "Test1")
someFunc (Right "Test2")

然而,这给,
Ambiguous type variable `b0' in the constraint:
(Show b0) arising from a use of `someFunc'
Probable fix: add a type signature that fixes these type variable(s)
In a stmt of a 'do' expression: someFunc (Left "Test1")


Ambiguous type variable `a0' in the constraint:
(Show a0) arising from a use of `someFunc'
Probable fix: add a type signature that fixes these type variable(s)
In the expression: someFunc (Right "Test2")

如果我理解正确,当我使用 Left x 调用函数时,它会提示,因为它不知道 Right x 变体的类型,反之亦然。但是,不使用该函数的这个分支。有一个更好的方法吗?

最佳答案

嗯,这在很大程度上取决于你想要做什么,不是吗?正如您已经发现的,为了使用 Left 构造函数,您需要知道它构造的类型。完整类型需要有关 ab 的信息。

在 Haskell 中实现多态的更好方法是使用类型类。您可以轻松地为不同的实例提供不同的“方法”实现。

可以找到对面向对象和类型类概念的良好比较 here

关于haskell - 可以用于一种简单的多态性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8854773/

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