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
Post a Comment