[Haskell] Classes with no data type

Brian Hulley brianh at metamilk.com
Tue Oct 10 11:19:12 EDT 2006


Thomas Davie wrote:
> Hi,
>   I've met an interesting problem in terms of how to type a data
> structure and the functions that operate upon it.
>
> The problem centres around a single data type.  This data type can be
> constructed in multiple ways using different functions, depending on
> the options the user specifies.  That's all simple enough.  The
> problem really comes later on.  Depending on the function used
> generate the data structure I want to use different functions later
> on for example, to display the data.
>
> Thus I have a typical classes problem, in that I have several
> implementations of essentially the same function for different
> circumstances.  The problem is, they must all operate on the same
> data type, so I cannot define them as seperate instances.
>
> Anyone got any ideas how to type this?

You could add a field to the data type to store a record of closures to 
operate on it eg

    data T = T {_ops :: Ops, ...}

    data Ops = Ops{_print :: IO ()}

    print :: T -> IO ()
    print = _print . _ops

so the different smart constructors for T would fill in the Ops member as 
required - in other words you can make your own dictionary explicitly to get 
more flexibility instead of using the instance/class mechanism.

Regards, Brian.
-- 
Logic empowers us and Love gives us purpose.
Yet still phantoms restless for eras long past,
congealed in the present in unthought forms,
strive mightily unseen to destroy us.

http://www.metamilk.com 



More information about the Haskell mailing list