data Sentence = S String
instance Show Sentence where
show (S p) = p
For input
show (S "y")
Output is
"y"
What should I add to my code that I get the same result but instead of using keyword "show" I use "print?
print (S "y")
"y"
CodePudding user response:
show is not a keyword. It's an identifier. It identifies a function.
In order to use print instead of it, just tell the compiler that you want the identifier print to identify the same function as show:
print = show
If you want to add a type signature to it (you don't have to, but it's a good practice), that signature will have to include the Show constraint, because that's whence the function show comes:
print :: Show a => a -> String
print = show
Alternatively, if you wanted the function print to only apply to type Sentence (rather than any showable type), you can make your type signature specify that:
print :: Sentence -> String
print = show
In this case the Show constraint isn't necessary, because the compiler knows the type and can lookup the Show instance for it.
