On 9/25/07, Erick Tryzelaar <[EMAIL PROTECTED]> wrote:
> Isn't this kind of monadic? Do I understand monads enough that you
> could define a combinator to do this?
>
> File::open 'foo' >>= File::getlines >>= List::sort >>=
> List::iter[string] (fun (line:string) =>
>  println line;
> );
>
> -e


If we used something similar to haskell's error and list monads, we
could have something like this (culling the typeclasses):

union failure[a,b] =
  | Failure of a
  | Ok of b
;

fun openf (f:string): failure[string,List::list[string]] =
{
  return Ok[string,string] List::list("a","b","c");
}

fun lift[A,B,C] (f:B->C) (x:failure[a,b]): failure[A,C] =>
  match x with
  | Failure ?x => Failure[A,C] x
  | Ok ?x => f x
  endmatch
;

match
  openf "foo" >>= lift $ the List::sort >>= List::iter (fun (line:string) =>
    print $ (repr line) + " ")
with
| Failure ?e => { println $ "failed with: " + e; }
| _ => {}
endmatch;


I think this could work, and while normally I can't really "read" what
>>= means in haskell, here I kind of understand how things are being
piped around.


With catch from haskell, this could be done like this:

catch
  (openf "foo" >>= lift $ the List::sort >>= List::iter (fun (line:string) =>
    print $ (repr line) + " "))
  (fun (e:string) = { println $ "failed with: " + e; });

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to