Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module type SOURCE =
- sig
- type element
- type iterator
- type leftovers
- type result =
- | Cont of element * iterator
- | Done of leftovers
- val get : iterator -> result
- end
- module type SINK =
- sig
- type element
- type iterator
- type leftovers
- type result =
- | Cont of iterator
- | Done of leftovers
- val put : iterator * element -> result
- end
- module Transform (Source : SOURCE) (Sink : SINK) =
- struct
- type result =
- | Depleted of Source.leftovers * Sink.iterator
- | Saturated of Source.iterator * Sink.leftovers
- let transform f =
- let rec loop (source, sink) =
- match Source.get source with
- | Done leftovers -> Depleted (leftovers, sink)
- | Cont (element, source) ->
- match Sink.put (sink, f element) with
- | Done leftovers -> Saturated (source, leftovers)
- | Cont sink -> loop (source, sink)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement