튜토리얼 this에서 아마 모나드 바인딩 기능 우선 순위 :내가 다음 코드를 발견했습니다
deposit :: (Num a) => a -> a -> Maybe a
deposit value account = Just (account + value)
withdraw :: (Num a,Ord a) => a -> a -> Maybe a
withdraw value account = if (account < value)
then Nothing
else Just (account - value)
eligible :: (Num a, Ord a) => a -> Maybe Bool
eligible account =
deposit 100 account >>=
withdraw 200 >>=
deposit 100 >>=
withdraw 300 >>=
deposit 1000 >>
return True
main = do
print $ eligible 300 -- Just True
print $ eligible 299 -- Nothing
나는 >>=
기능이 작동하도록되어 방법을 알아낼 수 없습니다. 처음에는 첫 번째 매개 변수로 Maybe a
값을 취 : deposit 100 account >>=
는 이후, 그러나 그것의 첫 번째 매개 변수로 a -> Maybe a
을 보인다 : withdraw 200 >>=
를이는 컴파일러에 의해 승인 될 수 있는가? >>=
은 항상 첫 번째 매개 변수로 Maybe a
을 가져 가면 안됩니까? ((a >>= b) >>= c) >>= d
그러나 내가 아는 한, 그 반대입니다 : 내가 아는 a >>= (b >>= (c >>= d))
'do'표기법과 혼동했을 수 있습니다. do a <- b; c <- d; e'는'b >> = (\ a -> d >> = (\ c -> e))'입니다. – sdcvvc
@sdcvvc : 고마워요, 이것은 정말로 내 혼란의 근원이었습니다. – kahoon
"아마도 모나드 바인딩 기능 우선 순위"가 아님을주의하십시오. 서로 다른 타입 인스턴스에 대해 다른 우선 순위를 가질 수는 없으므로 * 모든 * 모나드 바인딩에 우선 순위가 있어야합니다. – Ashe