假设我需要不同的输出,具体取决于函数的多态参数的类型。我的初始尝试失败一些神秘的错误消息:多态参数类型的模式匹配 - 替代
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或允许我使用第一个变体(或类似的东西)的任何扩展中有没有功能?
'Data.Typeable'允许的查询类型在运行时,但它不应该轻易使用。 – chi