0

모나드에 대한 나의 이해가 여전히 형성되고 있습니다. 연관성을 제외하고 모나드가 준수해야하는 다른 세 가지 계약은 identity, purebind입니다.Nullable <T> 모나드의 바인드 및 ID 기능은 어디에 있습니까?

나는 Nullable<T> 형태의 순수한 함수의 생성자, 나는 Nullable<T>에 어떤 identitybind 기능이 표시되지 않는 것을 추론.

+0

모나드는 보통'return'과'bind'라는 함수를 사용하여 정의됩니다. 여러분은'identity'와'pure'에 대해 어디서 들었습니까? – svick

+0

@svick 저는 많은 비디오를 보았습니다. 이제는 모두 다른 어휘집을 제공하지만 동일한 개념을 제공합니다. 내가 '순수'라고 부르는 것은 분명히 여러분이 언급 한'return' 함수입니다. 나는 'bind'가 어디에 있는지 궁금해하고있다. 그리고 나는 질문을 던졌기 때문에 'Nullable '구현과 모나드에 대해 생각해 봤지만 바인딩을 수행하는 방법 일 필요는 없다고 생각하지만 그냥 개체가 바인딩을 허용해야합니다. 'Nullable '의 어떤 메커니즘이 바인딩을 허용하는지 궁금합니다. –

답변

1

닷넷 Nullable<T>bind 방법을 포함하지 않지만, 하나 직접 구축 할 충분한을 제공합니다

static Nullable<T2> Bind<T1, T2>(Nullable<T1> source, Func<T1, Nullable<T2>> f) 
    where T1 : struct where T2 : struct 
{ 
    return source.HasValue ? f(source.Value) : null; 
} 

C 번호는 bind보다는 비슷한 (하지만 덜 일반) 뭔가를 포함하지 : 널 (null) 조건 연산자를 ?. . a이 이고 BNullable<T2> 유형의 자산이라면 a?.BBind(a, x => x.B)과 같습니다.

+0

그렇다면'IEnumerable '과 그것의 파생물이나 이중체, 즉'IObservable ','IQueryable '과'IQbservable '을 절약한다고 생각하는 것은 CLR 타입 시스템에있는 모든 모나드가 모나드? 나는 또한'IEnumerable '에는'ID' 또는'return' ('Empty'와'Range'가 있지만'return'는 없음)이없고'IObservable '에는'Return'과 그 내부 클래스에는 단일 요소 시퀀스의 마지막 요소를 반환하는 'Omega'가 있습니다. –

+0

기다려! 'Enumerable'은 제네릭이 아닌'IEnumerable'에 대해'AsEnumerable'을 가지고 있습니다. 그러나 여전히'return'은'T'를 가져 와서'M '를 돌려 주어야합니다. 그리고 "신원"펑터도 없다. –