Q:

define addition as an instance of Num in haskell

I wish to define addition between two chars as concatination but im unsure of how to properly do so.
my attempt:
instance Num Char where
 (+) (a) (b) = [a] ++ [b]

but the error i get is that the  return type is not the expected one.  
My expected output is as stated a list of Char which is formed by concatinating the two chars.

A:

Rather than overload (+) with non-numeric semantics, define your own character "addition" operator.
import Data.Function

-- The ^ is meant to suggest lifting values into a list.
(^+) :: a -> a -> [a]
x ^+ y = (++) `on` pure
-- Or more simply,
-- x ^+ y = [x, y]

Then 'a' ^+ 'b' == "ab". (^+) will work for creating a two-element list of any type, not just Char.
> 'a' ^+ 'b'
"ab"
> 3 ^+ 4
[3,4]
> [1,2] ^+ [4,5]
[[1,2],[4,5]]

A:

This is impossible. The (+) function in Num has type a -> a -> a, so the return type must be the same as the parameter type. You cannot add two Char and receive a String as a result. More generally, you should not implement Num for things other than arithmetic on numbers.

