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

Ale*_*ean 2 haskell

我正在使用这个优秀的教程作为基础在Haskell中做一些简单的正则表达式工作,并且我遵循作者的建议使用显式类型签名来使=~regexp运算符返回a 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
Run Code Online (Sandbox Code Playgroud)

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

fuz*_*fuz 7

该功能toUpper具有签名Char -> Char.使用map映射toUpper的所有字符在String:

getSKU :: FilePath -> String
getSKU path = 
    map toUpper $ path =~ "^sku[0-9]{5}" :: String
Run Code Online (Sandbox Code Playgroud)