\lstdefinelanguage{lHaskell}{
language=haskell,
moredelim=**[is][{\xlsthlwarning}]{|warn|}{|warn|},
moredelim=**[is][{\xlsthlerror}]{|err|}{|err|},
moredelim=**[il][{\xlsthlerror}]{|err|:},
moredelim=**[is][{\xlsthlinfo}]{|info|}{|info|},
moredelim=[is][{}]{|plain|}{|plain|},
comment=[l]{--},
deletekeywords={Maybe,Either,Maybe,Either,Nothing,Just,Left,Right,\$},
morecomment=[s]{\{-}{-\}},
escapeinside={!*}{*!}, % !! would collide with the '!!' List select operator
morekeywords = {:l,:cd,:q,:r,:t,String,Char,Bool,Show},
morekeywords = [2]{<,>,->,=>,<-,>=},
morekeywords = [3]{True,False,Maybe,Either,Nothing,Just,Left,Right},
morekeywords = [4]{::,\$},
morekeywords = [5]{Prelude>,\*Main>},
alsoletter={-|~_.><=:\*'},
}
\RegisterLanguage{haskell}{lHaskell}