Difference between revisions of "Unamb"

From HaskellWiki
Jump to navigation Jump to search
(pointers to blog posts & email threads)
(lub pointer)
Line 20: Line 20:
   
 
<!-- Please leave comments at the [[Talk:unamb|Talk page]]. -->
 
<!-- Please leave comments at the [[Talk:unamb|Talk page]]. -->
  +
See also the [[lub]] package, which extends unamb's usefulness with non-flat types.
  +
 
As of version 0.1.1, unamb requires ghc 6.10 or better.
 
As of version 0.1.1, unamb requires ghc 6.10 or better.
   

Revision as of 21:29, 19 January 2009


Abstract

unamb is a package containing the unambiguous choice operator unamb, which wraps thread racing up in a purely functional, semantically simple wrapper. Given any two arguments u and v that agree unless bottom, the value of unamb u v is the more terminating of u and v. Operationally, the value of unamb u v becomes available when the earlier of u and v does. The agreement precondition ensures unamb's referential transparency. For more info about unamb and its use, see the paper Simply Efficient Functional Reactivity, sections 10 and 11.

unamb was originally a part of Reactive. I moved it to its own package in order to encourage experimentation.

Besides this wiki page, here are more ways to find out about unamb:

See also the lub package, which extends unamb's usefulness with non-flat types.

As of version 0.1.1, unamb requires ghc 6.10 or better.

As of version 0.1.6, unamb correctly handles recursive termination of sub-efforts and automatic restarting, but only with the GHC RTS fixes that first appeared (stably, by my testing) in GHC HEAD version 6.11.20090115. The problems and solution can be found in a few places: