如何在表达式中途使用Haskell类型签名?

时间:2011-09-05 19:10:05

标签: haskell

我正在使用此excellent tutorial作为基础在Haskell中进行一些简单的正则表达式工作,我遵循作者的建议,使用显式类型签名来使=~ regexp运算符返回String。我的问题是我想进一步操纵它(基本上toUpper结果),我不知道该怎么做。

我已尝试过以下各项,每次都会出现Couldn't match expected type 'String' against inferred type 'Char'错误或类似错误:

getSKU :: FilePath -> String
getSKU path = 
    toUpper $ path =~ "^sku[0-9]{5}" :: String

-- or...
getSKU path = 
    let key = (path =~ "^sku[0-9]{5}")
    in toUpper key

-- or ...
getSKU = 
    toUpper . sub
    where
        sub p = (p =~ "^sku[0-9]{5}") :: String

我很难过 - 如何通过表达式来表达类型签名,而不需要使用整个单独的函数?

1 个答案:

答案 0 :(得分:7)

函数toUpper具有签名Char -> Char。使用maptoUpper映射到String

中的所有字符
getSKU :: FilePath -> String
getSKU path = 
    map toUpper $ path =~ "^sku[0-9]{5}" :: String