I'm following this [introduction to Haskell](http://www.cs.auckland.ac.nz/references/haskell/haskell-intro-html/goodies.html), and this particular place (user defined types 2.2) I'm finding particularly obscure. To the point, I don't even understand what part of it is code, and what part is the thoughts of the author. (What is `Pt` - it is never defined anywhere?). Needless to say, I can't execute / compile it.

As an example that would make it easier for me to understand, I wanted to define a type, which is a pair of an Integer and a String, or a String and an Integer, but nothing else.

The theoretical function that would use it would look like so:

```
combine :: StringIntPair -> String
combine a b = (show a) ++ b
combine a b = a ++ (show b)

```

If you need a working code, that does the same, here's CL code for doing it:

```
(defgeneric combine (a b)
  (:documentation "Combines strings and integers"))

(defmethod combine ((a string) (b integer))
  (concatenate 'string a (write-to-string b)))

(defmethod combine ((a integer) (b string))
  (concatenate 'string (write-to-string a) b))

(combine 100 "500")

```