# functions not in type classes

**Ashley Yakeley
**
ashley@semantic.org

*Fri, 18 Jan 2002 00:27:09 -0800*

At 2002-01-18 00:06, Cagdas Ozgenc wrote:
>*Why does Haskell let you write functions that are not a part of type class?
*
Well, what classes should such functions as const, id and (.) be members
of?
const :: a -> b -> a;
const x y = x;
id :: a -> a;
id x = x;
(.) :: (b -> c) -> (a -> b) -> (a -> c);
(.) f g x = f (g x);
>*For example instead of
*>*
*>*elem :: Eq a => a -> [a] -> Bool
*>*map :: (a -> b) -> [a] -> [b]
*>*
*>*class Container a where
*>* elem :: Eq b => b -> a b -> Bool
*>* map :: (b -> c) -> a b -> a c
*>*
*>*would define methods that can work on all containers,
*
Actually this would only work on container type-constructors. If you had
a type that was some kind of container only of Char, you could not make
it an instance of your Container.
>*and create a discipline to write more reusable and generic functions.
*
There's already a generalised version of map, called fmap, that works on
any Functor type. Picking the correct generalisation is often not
obvious...
--
Ashley Yakeley, Seattle WA