-- I have replaced Set by Type in order to be more in accordance with what was learned in the -- lecture. data Char = a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | blank data String = nil | cons (c:: Char) (s :: String) concat (x :: String) (y :: String) :: String = case x of { (nil) -> y; (cons c x') -> cons c (concat x' y);} double (x:: String) :: String = {! !} Test :: Type = {!double (cons h (cons e (cons l (cons l (cons o (cons blank nil)))))) !}