: 당신이 Maybe a
에서 a
을 추출 할 경우 GHCi에서
, 당신은 몇 가지 옵션이 있습니다. 당신이이 Just something
로 성공 확신하는 경우 첫째, 당신은 그러나
> let Just a = Just 1
> print a
1
을 할 수있는 작업이이 모든 말하는
> let Just a = Nothing :: Maybe Int
> print a
*** Exception <interactive>12:5-20: Irrefutable pattern failed for pattern Data.Maybe.Just a
가 있다는 것입니다 성공하지 못한 경우이 문제가 발생할 수 있습니다 사용 된 패턴 일치가 실패했습니다. 어떻게 이것을 피할 수 있습니까? 사례 명세서가 있습니다.
> -- Enable multiline input (I have this in my .ghci file so it's always on)
> :set +m
> let maybeA = Just 1
|
> case maybeA of
| Just x -> print x
| Nothing -> return() -- Do nothing
|
1
하지만 힘든 일입니다. 하스켈에 대안이 내장되어 있다면 좋지 않을까요? 다행히도, Data.Maybe
모듈에있다 :
> import Data.Maybe
> :type maybe
maybe :: b -> (a -> b) -> Maybe a -> b
> -- The -1 is our default value in case of Nothing
> print $ maybe (-1) id $ Just 1
1
> print $ maybe (-1) id $ Nothing
-1
당신이 원하는 모든이 Just
의 값 또는 디폴트 값 중 하나 일 때 사용하기에도 쉬운 기능이있다 :
> print $ fromMaybe (-1) $ Just 1
1
그러나 maybe
이 더이 일반적으로 강력 함 :
> print $ maybe 0 (\x -> 2 * x - x * x * x + 7^x) $ Just 3
322
작업이 성공적으로 완료된 경우도 있습니다. 분명히
> isJust $ Just 1
True
> isJust $ Nothing
False
그리고 isNothing = not . isJust
:이를 위해 Data.Maybe
는 isJust
및 isNothing
있습니다.
GHCi에서이 작업을 수행하고 있습니까? 'let just b = stripPrefix pref stri'를 시도해보십시오. 그러나'Nothing'을 리턴하면'putStrLn b'를 할 때'b'에 넣을 내용이 없으므로 다른 오류가 발생합니다 변하기 쉬운. – bheklilr
@bheklilr 감사합니다! 이 경우 b가 언제인지를 아는 방법이 있습니까? –
또는'just'의 내부에 적용 할 함수와 기본값을 취하는'maybe' 함수를 사용할 수 있습니다. 그래서'putStrLn $ maybe "할 수 있습니다. Prefix stripping failed .."("Stripped : "++) $ stripPrefix pref stri'입니다. 실패하면 오류 메시지를 인쇄합니다. 성공하면 제거 된 문자열을 인쇄합니다. – bheklilr