에서 (모나드) 계산의 결과를 폐기하는 방법, 내가 쓸 수 있습니다 : 제대로 하스켈에서 F 번호
token: Parser a -> Parser a
token p = do space
v <- p
space
return v
이 F 번호에서, 내가 여기까지 온
: 즉let token = compose {
let! _ = space
let! v = parser
let! _ = space
return v
}
을, 이 사용하지 않는 let! _ =
바인딩을 도입하여 "space"파서 (모나드)의 구문 분석 값을 무시하고 필요는 없다.
F #에서 이러한 쓸모없는 바인딩을 방지하려면 어떻게해야합니까? 내가 사용하는 시도!하지만 난 오류가 (내 >>=
기능 형 유닛을 가지고 있지만하지 않기 때문에 'A) :
type ParserComposer() =
member x.Bind(p, f) = p >>= f
member x.Return(y) = ret y
member x.Zero() = failure
내가해야합니까 :
여기
let (>>=) (p: Parser<'a>) (f: 'a -> Parser<'b>) : Parser<'b>
내 빌더 정의입니다 >>
함수를 정의 하시겠습니까? 빌더에 결합()을 추가 하시겠습니까? 어떤 아이디어가이 일을 올바르게하는 방법? 코드 예제? space
의 반환 유형을 가정
당신은 이미 표준 연산자이므로 다른 이름으로'>>'를 정의 할 수 있습니다. 예 : https://github.com/fsharp/fsharpx/blob/9ad7ff3024b1cc90fd252520272421920c1f4017/src/FSharpx.Core/ComputationExpressions/Monad.fs#L779 –
좋아요. 다른 이름으로 >>를 정의한 경우 어떻게해야합니까? ? – badbadboy
하스켈에서 사용 하듯이 사용합니다. 아니면'let! _ = ...' –