ShowS is just a type alias for String -> String.  Anywhere where you could put a function of type String -> String you could replace that with ShowS.  Examples

blah :: String -> String
blah "abc" = "def"

is no different than

blah :: Shows
blah "abc" = "def"

From the GHC.Show import

GHC.Show.showList__ :: (a -> ShowS) -> [a] -> ShowS

is equivalent to

GHC.Show.showList__ :: (a -> (String -> String)) -> [a] -> (String -> String)

It can be a little confusing but a lot of times you use the same function prototype and it is useful to just turn it into its own little type to shorten the types in your code.


On Tue, Sep 24, 2013 at 6:15 AM, yi lu <zhiwudazhanjiangshi@gmail.com> wrote:
Prelude> :i ShowS
type ShowS = String -> String     -- Defined in `GHC.Show'

It is a type of a function? I cannot understand this type, and don't know how to create functions of this type.

And this function "shows"

Prelude> :i shows
shows :: Show a => a -> ShowS     -- Defined in `GHC.Show'

I don't know how this function works.

Yi

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners