[Haskell-cafe] One-shot? (was: Global variables and stuff)

Keean Schupke k.schupke at imperial.ac.uk
Thu Nov 11 16:09:29 EST 2004

>Actually, I don't see anything wrong on the face of it with
>oncePerType :: Typeable a => IO a -> IO a
>since the only instances of Typeable are monomorphic.  Indeed, the
>implementation seems pretty straightforward: store the results of
>already-run computations as Dynamic values in a global dictionary,
>keyed by TypeRep.
What happens if more than one 'once' function returns the same type? I 
guess you could wrap the types in a unique constructor. Infact you could 
use the HList library to produce a type indexed list with a unqiue type 
constraint that can be enforced at compile time.

The version with the String key also seems interesting, as the key 
could  be the name of the function being memoised, which has to be 
unique. Template-Haskell could be used to generate the reified string 
from the function name, it would end up like (in the new TH syntax):

    a <- $(once 'function) a b c


More information about the Haskell-Cafe mailing list