Render Number, Bool, String as String fails in haskell -


i have small program, takes 1 of boolean, number, string , renders string.

module main ()  data value = number int        | bool bool        | string string     deriving (eq, show)  rendervalue :: value -> string rendervalue (string s) = show s rendervalue(bool true) = "true" rendervalue(number n) = show n  main =   putstrln $ rendervalue "bye, saravana" 

rendervalue overloaded method supposed take string inputs. last line,

putstrln $ rendervalue "bye, saravana" 

prints error as,

couldn't match expected type ‘value’ actual type ‘[char]’ in first argument of ‘rendervalue’, namely ‘"bye, saravana"’ in second argument of ‘($)’, namely   ‘rendervalue "bye, saravana"’ in stmt of 'do' block: putstrln $ rendervalue "bye, saravana" 

why value = number | bool | string not taking string inputs?

your data declaration defines type value along 3 constructors: number, bool , string. rendervalue function requires value argument, while in

rendervalue "bye, saravana" 

you providing string (which alias [char]) argument. need provide value i.e.

rendervalue (string "bye, saravana") 

you should consider renaming constructors value since clash existing string , bool types may causing confusion.


Comments