diff --git a/TTTAS.cabal b/TTTAS.cabal
--- a/TTTAS.cabal
+++ b/TTTAS.cabal
@@ -1,7 +1,7 @@
 cabal-version:      >=1.2.3
 build-type:         Simple
 name:               TTTAS
-version:            0.4.0
+version:            0.4.1
 license:            LGPL
 license-file:       COPYRIGHT
 maintainer:         Marcos Viera <mviera@fing.edu.uy>
@@ -10,9 +10,11 @@
 synopsis:           Typed Transformations of Typed Abstract Syntax
 category:           Language 
 copyright:          Universiteit Utrecht
-build-depends:      base >= 4 && < 5, haskell98
-exposed-modules:    Language.AbstractSyntax.TTTAS       
-extensions:         Arrows, GADTs, CPP
-hs-source-dirs:     src
 extra-source-files: README, LICENSE-LGPL, TTTAS.bib
-ghc-options:        -Wall
+library
+        build-depends:      base >= 4 && < 5, haskell98
+        exposed-modules:    Language.AbstractSyntax.TTTAS       
+        extensions:         Arrows, KindSignatures, RankNTypes, GADTs, CPP
+        hs-source-dirs:     src
+        ghc-options:        -Wall
+
diff --git a/examples/CSE.hs b/examples/CSE.hs
--- a/examples/CSE.hs
+++ b/examples/CSE.hs
@@ -1,4 +1,4 @@
-{-# OPTIONS -fglasgow-exts -XArrows #-}
+{-# OPTIONS -fglasgow-exts -XGADTs -XArrows #-}
 
 module CSE where
 
diff --git a/examples/CSE2.hs b/examples/CSE2.hs
--- a/examples/CSE2.hs
+++ b/examples/CSE2.hs
@@ -1,4 +1,4 @@
-{-# OPTIONS -fglasgow-exts  #-}
+{-# OPTIONS -fglasgow-exts -XGADTs  #-}
 module CSE2 where
 
   import Language.AbstractSyntax.TTTAS
diff --git a/src/Language/AbstractSyntax/TTTAS.hs b/src/Language/AbstractSyntax/TTTAS.hs
--- a/src/Language/AbstractSyntax/TTTAS.hs
+++ b/src/Language/AbstractSyntax/TTTAS.hs
@@ -1,4 +1,4 @@
-{-# OPTIONS -fglasgow-exts -XArrows #-}
+{-# OPTIONS -XKindSignatures -XRankNTypes -XArrows -XGADTs #-}
 {-# LANGUAGE CPP #-}
 
 {-| 
@@ -445,7 +445,8 @@
        ) 
 
   second2 f = arr2 swap >>>> first2 f >>>> arr2 swap
-              where   swap ~(P (x, y)) = P (y, x)
+              where   swap :: Pair c a s -> Pair a c s
+                      swap ~(P (x, y)) = P (y, x)
              
   f **** g =  first2 f >>>> second2 g  
  
