haskell - Haskell 中两个不相关类型之间的情况

标签 haskell types type-systems

是否可以在 Haskell 中的两个不相关类型之间使用 case 表达式,如本例(不工作)代码所示:

data A = A
data B = B

f x = case x of
  A -> 1
  B -> 2

main = do
  print $ test A
  return ()

我知道我可以在这里使用Either,但这段代码并不意味着要使用 - 我想深入学习 Haskell 类型系统并看看可以做什么。

最佳答案

AB 是不同的类型。如果您想要一个可以接受多种类型值的函数,则需要一个类型类。

data A = A
data B = B

class F a where
  f :: a -> Int

instance F A where
  f _ = 1

instance F B where
  f _ = 2

main = do
  print $ f A

关于haskell - Haskell 中两个不相关类型之间的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18003300/

相关文章:

haskell - Haskell 的纯度是由类型系统或 IO 的实现强制执行的吗?

scala - 为什么 PartialFunction < : Function in Scala?

haskell - uncurry 和 fanin 在范畴论中是如何关联的?

generics - 使用泛型作为集合中函数​​的参数

types - 为什么Go的io包中没有RuneWriter接口(interface)?

haskell - Milner 是否让多态性成为 2 级特征?

haskell - 功能取决于输入。设计困境

Haskell 尝试理解类型类语法

haskell - 我可以使用模板 haskell 来定义缺少的功能吗?

php - 为什么 PHP 严格类型允许错误类型的函数参数?