[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