On Sunday 07 November 2004 19:36, Benjamin Franksen wrote:
data (?val::Bool) => Test = Test { name :: String }
is rejected by the compiler [...] which is unfortunate since it means that you cannot put a function that depends on an implicit parameter into a data structure. There are probably technical reasons for this restriction, but it means that such functions are no longer first class objects.
Here is an executive summary lest anyone gets false ideas: Functions with implicit parameters *are* first class values but only if you use -fglasgow-exts and not only -fimplicit-params. The version above is rejected nonetheless (for whatever reason I can't figure out at the moment) but data Test = Test { name :: (?val::Bool) => String } works. The compiler flag is needed because in Haskel98 contexts may not appear after the 'data' (i.e. the way I tried it at first) and -fglasgow-exts lifts this restriction. I haven't found this explicitly mentioned in the ghc docs, but that doesn't mean it's not there somewhere. References: http://www.haskell.org/onlinelibrary/decls.html Thanks to Ben Rudiak-Gould who helped me to resolve this. Cheers, Ben -- Top level things with identity are evil. -- Lennart Augustsson