是否可以在haskell中编写一个函数,在以下情况下返回一个泛型类型:
- 在这个函数的主体中,我们输出 2 个不同的类型
A
和B
(基于一些计算) - 类型
A
和B
有一个共同的type class
C
让我们看看示例代码。类型检查器应该能够检查此代码是否正确 - 函数输出类型为ortest
的实例,因此我们可以对结果执行。A
B
f
data A = A
data B = B
class C a where
f :: a -> Int
instance C A where
f x = 2
instance C B where
f x = 3
-- This function fails to compile:
-- I want something like:
-- test :: C a => Int -> a
test x = if x < 1
then A
else B
main = do
print $ f $ test 0
print $ f $ test 1
我知道这可能看起来像反模式或类似的东西,但我想知道答案,因为我喜欢测试 Haskell 功能,尤其是涉及到类型系统时。