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