Haskell無法與實際類型“Char”匹配預期類型“String”



(1)

使用單引號( 'F' )給你一個Char 。 對於實際上是Char值列表的String ,應該使用雙引號( "F" )。

由於String[Char]的別名,所以如果要從Char轉換為String ,則只能將Char包裝在一個元素列表中。 這樣做的功能可能如下所示:

stringFromChar :: Char -> String
stringFromChar x = [x]

這通常以內聯方式(:[])寫成,相當於\x -> (x : [])\x -> [x]

另外,您可以使用Enum類型類來顯著簡化代碼:

toHexDigit :: Int -> Char
toHexDigit x
  | x < 0 = error "toHex: negative digit value"
  | x < 10 = toEnum $ fromEnum '0' + x
  | x < 15 = toEnum $ fromEnum 'A' + x - 10
  | otherwise = error "toHex: digit value too large"

更一般地說,任何時候你有一個功能,如:

f x
  | x == A = ...
  | x == B = ...
  | x == C = ...
  ...

您可以將其轉換為較少重複,更高效的等同case

f x = case x of
  A -> ...
  B -> ...
  C -> ...
  ...

我想知道為什麼我得到這個錯誤。 這是一個任務,我要從一個整數轉換為十六進制值。 我調用這個幫助器轉換函數時,我的整數值16 。 (與我在遞歸調用中除以16的整數值連接)

這是我的代碼:

    changeToHex :: Integer -> String
    --main function

    toHex :: Integer -> String
    toHex x
        |x == 0         = '0'
        |x == 1         = '1'
        |x == 2         = '2'
        |x == 3         = '3'
        |x == 4         = '4'
        |x == 5         = '5'
        |x == 6         = '6'
        |x == 7         = '7'
        |x == 8         = '8'
        |x == 9         = '9'
        |x == 10        = 'A'
        |x == 11        = 'B'
        |x == 12        = 'C'
        |x == 13        = 'D'
        |x == 14        = 'E'
        |x == 15        = 'F'




char