[GHC] #8348: Add Super-classes to libraries
GHC
ghc-devs at haskell.org
Mon Sep 23 22:30:33 CEST 2013
#8348: Add Super-classes to libraries
------------------------------------+-------------------------------------
Reporter: wvv | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: libraries/base | Version: 7.6.3
Keywords: | Operating System: Unknown/Multiple
Architecture: Unknown/Multiple | Type of failure: None/Unknown
Difficulty: Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: |
------------------------------------+-------------------------------------
Haskell community has a long discussion how to implement a superclasses
into Haskell.
Now it is used `default` method. But it looks ugly!
But all their abilities are already implemented!
We need just 2 extensions: FlexibleInstances and UndecidableInstances
{{{
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
instance Monad m => Applicative m where
pure = return
(<*>) = ap
instance Monad m => Functor m where
fmap = liftM
instance Monad m => Bind m where
(>>-) = flip (>>=)
B.join = M.join
}}}
this code is valid!
I've already defined 3 "superclassses" for Monad: Functor, Applicative and
Bind!
"superclass' instances" have unique quality from Programming Patterns and
typeclasses ideology: do not inherit, extend!
We could easily extend "superclasses" and make a lot of class'
dependences.
We don't need to insert inside the class some ugliness like
{{{
default return :: Applicative f => a -> f a
return = pure
}}}
Next is much prettier!
{{{
instance Monoid m => Alternative m where
(<|>) = mplus
empty = mzero
}}}
We could even use it with `Generic` without any `default`:
{{{
class ToJSON a where
toJSON :: a -> Value
instance (Generic a, GToJSON (Rep a)) => ToJSON a where
toJSON = genericToJSON defaultOptions
}}}
So, I suggest to made true "Applicative and Functor are superclasses of
Monad" and add all necessary superclass' instances to base libraries.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8348>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list