我正在使用此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
我很难过 - 如何通过表达式来表达类型签名,而不需要使用整个单独的函数?
答案 0 :(得分:7)
函数toUpper
具有签名Char -> Char
。使用map
将toUpper
映射到String
:
getSKU :: FilePath -> String
getSKU path =
map toUpper $ path =~ "^sku[0-9]{5}" :: String