을 내 질문은가정이 코드 구문 설탕 할당
g = Just 5 >>= \x -> Just x
는 사실에 할당 x <- Just 5
리드 있다는 것을 혼동하지를 x
을 그 유형이 Int
이고 Maybe Int
이 아니십니까? 아니면 내가 틀렸어?
을 내 질문은가정이 코드 구문 설탕 할당
g = Just 5 >>= \x -> Just x
는 사실에 할당 x <- Just 5
리드 있다는 것을 혼동하지를 x
을 그 유형이 Int
이고 Maybe Int
이 아니십니까? 아니면 내가 틀렸어?
아니요 혼란스럽지 않습니다. 또한 현실 세계의 문제에 좀 더 근접한 예를 펼치면이 모든 것에 대한 이유가 나타납니다. 예컨대 :
g :: Maybe Int
g = do
x <- Just 5 -- THIS LINE, `x` is plain Int
Just (x + 3)
x
여전히
Maybe Int
있다면 당신은이 문제를 해결할 방법
?
나는 this tutorial이 모나드를 이해하는 데 많은 도움이 될 것이라고 생각합니다.
좋은 튜토리얼! 고맙습니다. – Cartesius00
x :: Int
이 혼란 스럽다고 생각하면 틀린 것입니다. 여기에있는 실제 혼란은 x <- Just 5
을 지정으로으로 인식하는 것입니다. 어떤 것을 할당하려면 먼저 값을 추출 할 수 있어야합니다. 일부 모나드에서는 가능하지만 모든 모나드에서는 가능하지 않습니다. 예를 들어, Maybe a
은 하나의 값만 저장하므로 은 Maybe Int
에서 값을 "추출합니다"라고 상상할 수 있습니다. 그러나 단지 목록을 고려해 보면 유추가 실패합니다 : [a]
, 여기서 x <- [1..5]
은 더 이상 과제에 대한 직접적인 대응을하지 않습니다. 또한 임의의 모나드에서 값을 추출하는 함수가없는 이유이기도합니다. [Int]
에서 Int
을 "추출"하는 방법은 무엇입니까? Cont a Int
에서 "Int
"을 어떻게 "추출합니까"?
functor 나 모나드의 의미를 이해하려면 몇 가지 예제를 통해 작업해야합니다. m Int
을 "Int가있는 컨테이너"가 아니라 "-ness가있는"m
이라고 생각하는 것이 좋습니다. 즉, m
의 특정 동작은 m
이고 동작은 Int
과 관련이 있습니다. 모나드 운영은 특정 법률을 준수해야하므로 "m
일부는 Int
"으로 예를 들어 "m
이고 일부는 Char
"으로 일관되게 수정할 수 있습니다.
>>=
또는 <-
이 아닌 "재미있는 구성"인 <=<
을 "값 추출"으로 오해 할 수 있다고 생각하는 것이 좋습니다.
'x <- Just 5'와'x :: Int'의 경우'x <- [1..5]'에'x'의 타입은 무엇입니까? – Cartesius00
@ Cartesius00,'x'는'Int' 타입이지만,이 컨텍스트에서는 할당이 아닙니다. 적어도 정확하고 확실하게 명령형이 아닙니다. –
혼란스러운 것은 당신이 묻는 사람에 달려 있습니다. 즉 완전히 주관적입니다. 아니면 귀하의 질문이 뭔가 다른가요? – delnan
'g = Just 5 >> = \ x -> Just x'를'g = Just 5'로 간소화 할 수 있습니다. – wit