2011-09-05 4 views
2

나는이 excellent tutorial을 기초로 하스켈에서 간단한 정규 표현식 작업을하고 있는데, 명시 적 타입 시그니춰를 사용하여 =~ 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 

내가 난처한 상황에 빠진거야 - 내가 의지하지 않고 식을 통해 유형 서명 부분의 방법을 표현 할 방법을 완전히 별개의 기능?

답변

7

기능 toUpperChar -> Char입니다. String의 모든 문자를 통해 toUpper를 매핑 map를 사용하여 내

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

GAH 어떻게 바보! 감사합니다 –

+0

@Alex 문제 없습니다. Haskell에서 실수를하는 것은 쉽습니다. 간략한 설명 후에 명백하게 보입니다. – fuz

관련 문제