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 _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell