[Haskell-beginners] Question about class declaration

Felipe Lessa felipe.lessa at gmail.com
Fri Jul 24 08:57:47 EDT 2009


On Fri, Jul 24, 2009 at 08:44:32AM -0400, Brent Yorgey wrote:
> On Fri, Jul 24, 2009 at 09:41:34AM -0300, Rafael Gustavo da Cunha Pereira Pinto wrote:
> > class EditAction e a | e -> a where
> >   apply :: a -> e -> a
>
> It's a functional dependency: the e -> a means that the type e
> determines the type a, that is, there can only be one instance of
> EditAction for any particular type e.

Alternatively you could write that class using a type family:

class EditAction e where
  type Text e :: *
  apply :: Text e -> e -> Text e

(I don't know if "Text e" is a good name, but Haskell-wise this
should do the same trick as the fundep class.)

One example of an instance (out of the top of my head):

data Editor = Editor {text :: String, ...}
data EditorAction = Prepend String | ...
instance EditAction EditorAction where
  type Text EditorAction = Editor
  apply editor (Prepend s) = editor {text = s ++ text editor}

HTH,

--
Felipe.


More information about the Beginners mailing list