2

我使用如下类在 Haskell 中编写了一个泛型类型到类型转换器:

{-# LANGUAGE FlexibleInstances #-}

class Convertable a where
    convert::a

instance Convertable (Int -> String) where
    convert = show

instance Convertable (String -> Int) where
    convert = read

main = do
    let result = ((+1) . convert :: String -> Int) "1"
    print result

但我需要显式类型String -> Int才能使其工作(这否定了拥有泛型类型转换器的目的......)

为什么根本需要这种类型声明,只有一种可能性满足类型?

4

2 回答 2

4

转换不是这里的问题,默认情况下数字的类型是 Num a => a,所以这里的问题是 +1 你在那里。你必须给它一个具体的类型。

于 2013-11-05T23:11:33.067 回答
3

您也可以只指定的类型result和 ghc 将推断convertNum 实例的类型和类型(+1)

main = do
    let result :: Int
        result = ((+1) . convert) "1"
    print result
于 2013-11-05T23:50:21.910 回答