[m-dev.] io__write and arrays
David Glen JEFFERY
dgj at cs.mu.oz.au
Tue Apr 8 14:26:42 AEST 1997
Peter Schachte wrote:
>
> On Tue, 8 Apr 1997, Tyson Richard DOWD wrote:
>
> > > It would be nice if `io__write' did something a bit more meaningful
> > > for arrays.
> >
>
> Actually, there should probably be at least three standard ways to write
> things: (1) so that it's guaranteed they can be read back in, regardless
> of the operators in force at the time; (2) so they look reasonably good,
> but still reflecting the internal representation; and (3) "pretty,"
> reflecting the entity represented. These correspond to display, write,
> and print in Prolog.
>
> But all of this goes beyond the C interface. These things should all be
> possible for ordinary Mercury types, as well. I think the place to put
> this facility is in the type definition syntax, or perhaps an extra
> declaration, but not as part of the C interface.
I think type classes provide a nice solution to this. The programmer could
specify how the output functions are to work for a given type, with default
definitions provided.
In a Haskellish syntax:
class Printable a where
display:: a -> io__state -> io__state
write:: a -> io__state -> io__state
print:: a -> io__state -> io__state
display = io__inbuilt_write
write = io__inbuilt_write
print = io__inbuilt_write
Here, io__inbuilt_write corresponds to what is now `io__write'. It is
polymorphic, without typeclass a constraint. Using this you could do things
like:
instance Printable Char --- Just uses the default definitions
instance Printable (Tree234 k v) where
write = output_tree234_nicely
instance Printable (Uniq_array a) where
display = uniq_array_display
...
:- pragma c_code(uniq_array_display(Array::in, IO0::di, IO::uo),
"for(......
").
The downside is that a declaration would be required for each type that you
want to be able to print. Perhaps a mechanism which says `Everything is in this class. Here's the default definition which can be overriden' would be
nice. (?)
love and cuddles,
dgj
--
This .sig deliberately left blank
More information about the developers
mailing list