How to define an operator to show a sequence of polymorphic
things
Malcolm Wallace
Malcolm.Wallace@cs.york.ac.uk
Tue, 22 Apr 2003 16:35:25 +0100
Bernd Holzmüller <holzmueller@ics-ag.de> writes:
> I'd like to have a better way for "showing" a list of things, e.g.
>
> show (f1 t) ++ show (f2 t) ++ show (f3 t) ++ ....
>
> I would love to just write: (f1 # f2 # f3) t but I do not see how to
> define an operator like # in Haskell without applying show over again on
> the first arguments (i.e. f1 and f2). Because polymorphic lists are not
> possible, I can not define # as to write [f1,f2,f3] # t either.
How about the following?
infixr #
(#) :: (Show b) => (a->b) -> (a->String) -> (a->String)
f # g = \t-> show (f t) ++ g t
newline, empty :: a -> String
newline _ = "\n"
empty _ = ""
which you could use like
(f1 # f2 # f3 # newline) t
Regards,
Malcolm