ocaml-iteratees / pure_IO.ml

(* Pure "function name" is raised when the IO-function is called *)

exception Pure of string
;

    type m +'a = [= `Ok of 'a | `Error of exn ];
    value return x = `Ok x;
    value bind f m =
      match m with
      [ `Ok a -> f a
      | (`Error _) as me -> me
      ]
    ;
    value bind_rev m f =
      match m with
      [ `Ok a -> f a
      | (`Error _) as me -> me
      ]
    ;

    value error e = `Error e;

    value pu n = error (Pure n);


    value catch f handler =
      try
        match f () with
        [ (`Ok _) as a -> a
        | `Error e ->
            try
              handler e
            with
            [ ee -> `Error ee ]
        ]
      with
      [ e -> handler e ]
    ;

    type output_channel = unit;
    value stdout = ();
    value write () (_ : string) = pu "write";

    type input_channel = unit;
    value open_in (_ : string) = pu "open_in";
    value close_in () = pu "close_in";
    value read_into () (_:string) (_:int) (_:int) = pu "read_into";

    value runIO (x : m 'a) = (x :> [= `Ok of 'a | `Error of exn]);
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.