[Haskell-cafe] Re: Rewrite class with fundeps in pure h98?

Sterling Clover s.clover at gmail.com
Tue Jun 3 15:02:49 EDT 2008


This was how it was originally done in HStringTemplate, as I recall.  
The mptcs were introduced in order to maintain lookup-maps of the  
correct type, and particularly to allow embedding of templates within  
one another. There may have been some other corner-cases involved as  
well. However, unless you run into them, the H98 way is certainly  
cleaner.

--Sterl

On Jun 3, 2008, at 1:17 PM, apfelmus wrote:

> Darrin Thompson wrote:
>> I thought that I should be able to write something like the toHtml
>> function below with pure H98, but when I went to write it I ended up
>> needing fundeps. Is there a way to express this without using any
>> extensions?
>> The idea was to take a remotely Dom-like tree and flatten it into a
>> string, but not require any particular string type.
>> data (IsString s, Monoid s) => Dom s =
>>     Element s [Attr s] [Dom s] |
>>     Text s
>> data (IsString s, Monoid s) => Attr s = Attr s s
>> class (Monoid s, IsString s) => HTML d s | d -> s where
>>     toHtml :: d -> s
>> instance (Monoid s, IsString s) => HTML (Dom s) s where
>> instance (Monoid s, IsString s) => HTML (Attr s) s where
>
> The H98 way is to make a class for type constructors:
>
>   class HTML d where
>     toHTML :: (Monoid s, IsString s) => d s -> s
>
>   instance HTML Dom where ...
>
>   instance HTML Attr where ...
>
>
> Btw, naming the class "HTML" is feels wrong, something like  
> Serialize is probably a better fit.
>
>
> Regards,
> apfelmus
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list