假设我需要不同的输出,具体取决于函数的多态参数的类型。我的初始尝试失败并出现一些神秘的错误消息:
choice :: a -> Int
choice (_ :: Int) = 0
choice (_ :: String) = 1
choice _ = 2
但是,我们可以通过将所需类型包装在不同的数据构造函数中并在模式匹配中使用它们来轻松解决这个问题:
data Choice a = IntChoice Int | StringChoice String | OtherChoice a
choice :: Choice a -> Int
choice (IntChoice _) = 0
choice (StringChoice _) = 1
choice (OtherChoice _) = 2
问:你知道有什么方法可以规避吗?Haskell2010、GHC 或任何扩展中是否有允许我使用第一个变体(或类似的东西)的功能?