S.min ('1') ('02') =>'02'
왜 이것이 가능합니까? (yes type coercion ...하지만 이것은 Sanctuary입니다.) Strings를 사용할 때 아무것도 반환되지 않도록 Sanctuary를 구성 할 수 있습니까? 이를 처리하는 우아한 방법이 있습니까?
다음 유형을 고려해 봅시다 S.min
.
min :: Ord a => a -> a -> a
String
Ord의 요구 사항을 충족하므로 String -> String -> String
가능한 전문화 중 하나가 있습니다.
> S.min ('foo') ('bar')
'bar'
숫자 여야 하지만 그렇지 않을 수도있는 입력을 다루는 경우 가장 좋은 방법은 불확실성을 미리 처리하는 것입니다.
// untrustedInput1 :: Any
// untrustedInput2 :: Any
// input1 :: Maybe Number
const input1 = S.filter (S.is ($.Number)) (S.Just (untrustedInput1));
// input2 :: Maybe Number
const input2 = S.filter (S.is ($.Number)) (S.Just (untrustedInput2));
그런 다음을 사용 S.lift2
하여 값 S.min
에 Maybe Number
대해 작동 할 수있는 함수 로 변환 할 수 있습니다 .
S.lift2 (S.min) :: (Apply f, Ord a) => f a -> f a -> f a
위의 서명은 다음과 같이 특수화 할 수 있습니다.
S.lift2 (S.min) :: Maybe Number -> Maybe Number -> Maybe Number
마지막 단계는 S.lift2 (S.min)
신뢰할 수있는 입력 에 적용 하는 것입니다.
S.lift2 (S.min) (input1) (input2)
다음은 전체 작동 예입니다.
> S.lift2 (S.min)
. (S.filter (S.is ($.Number)) (S.Just ('1')))
. (S.filter (S.is ($.Number)) (S.Just ('02')))
Nothing
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다