[Haskell-cafe] How to define Show [MyType] ?
Ryan Ingram
ryani.spam at gmail.com
Tue Dec 9 06:09:56 EST 2008
Interesting. But from a practical point of view (I know, irrelevant!
*grin*), it's very tempting to piggyback the entirety of the typeclass
feature on a simple technique like this.
It also gives you the benefit that functions like this:
> manyConstraints :: (Show a, Eq a, Data a) => a -> Bool
end up only taking a single "type" argument, instead of one per class.
In addition, when you use types directly you can remove arguments that
are determined by FDs:
> class Elem c e | c -> e where ...
> instance Elem [a] a where ...
> toList :: Elem c e => c -> [e]
> toList = ...
turns into something like
> toList :: Type c -> c -> [e] using e = fdElem c
> fdElem c = typecase c of
> [e] -> e
> ... other instances ...
(without the dependency, you have to pass both the type of c and e to toList.)
-- ryan
On Tue, Dec 9, 2008 at 1:36 AM, Wouter Swierstra <wss at cs.nott.ac.uk> wrote:
>> The biggest wart is that "view" is not a total function; the compiler
>> needs to be extra careful to only call it on types that are instances
>> of "View". I wonder if there is a good way to solve this problem?
>
> The usual way to solve this is to define a data type corresponding to all
> the types in your class. For example:
>
> data Data a where
> | CHAR : Data Char
> | STRING : Data String
> | LIST : Data a -> Data [a]
> ...
>
> With this representation you no longer need typecase (which is horrendous
> semantic hack) and your dispatch function can be made total. Hope this
> helps,
>
> Wouter
>
>
>
> This message has been checked for viruses but the contents of an attachment
> may still contain software viruses, which could damage your computer system:
> you are advised to perform your own checks. Email communications with the
> University of Nottingham may be monitored as permitted by UK legislation.
>
>
More information about the Haskell-Cafe
mailing list