diff --git a/Data/Types/Injective.hs b/Data/Types/Injective.hs
--- a/Data/Types/Injective.hs
+++ b/Data/Types/Injective.hs
@@ -1,6 +1,9 @@
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ExplicitForAll #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE GADTs #-}
 
 -- |Injective types. This module contains the 'Injective' typeclass and instances
 --  for the following equivalence classes:
@@ -47,7 +50,7 @@
 --  @to@ should be a total function. No cheating by it undefined for parts of the set!
 class Injective a b where
    -- |Converts a value of type @a@ "losslessly" to one of type @b@.
-   to :: a -> b
+   to :: forall b1 a1. (b1 ~ b, a1 ~ a) => a -> b
 
 instance Injective a a where
    to = id
diff --git a/Data/Types/Isomorphic.hs b/Data/Types/Isomorphic.hs
--- a/Data/Types/Isomorphic.hs
+++ b/Data/Types/Isomorphic.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ExplicitForAll #-}
 
 -- |Contains the class definition of 'Iso', indicating isomorphism between two
 --  types.
@@ -17,7 +18,7 @@
 import Data.Types.Injective
 
 -- |The class of isomorphic types, i.e. those which can be cast to each
---  other withouth loss of information. Type isomorphism is an equivalence
+--  other without loss of information. Type isomorphism is an equivalence
 --  relation (reflexive, symmetric, transitive), but due to the limitations
 --  of the type system, only reflexivity is implemented for all types.
 --  Since there are no type inequality constraints, writing symmetry and
@@ -28,27 +29,17 @@
 --
 --  [@Isomorphism@]
 -- @
--- isoFrom . isoTo = id
+-- from . to = id
 -- @
 --
 --  Reflexivity, symmetry and transitivity are then "free":
 --
 -- @
--- instance Iso a a where
---    isoTo = id
---    isoFrom = id
--- @
---
--- @
--- instance Iso a b => Iso b a where
---    isoTo = isoFrom
---    isoFrom = isoTo
+-- instance Iso a a
 -- @
 --
 -- @
--- instance (Iso a b, Iso b c) => Iso a c where
---   isoTo = isoTo . isoTo
---   isFrom = isoFrom . isoFrom
+-- instance (Iso a b, Iso b c) => Iso a c
 -- @
 --
 --  Out of these, only the first one (reflexivity) is actually implemented,
@@ -58,7 +49,7 @@
 class (Injective a b, Injective b a) => Iso a b where
 
 -- |Synonym for 'to'.
-from :: (Iso a b) => b -> a
+from :: forall b a. (Iso a b) => b -> a
 from = to
 
 instance Iso a a where
diff --git a/changelog.txt b/changelog.txt
new file mode 100644
--- /dev/null
+++ b/changelog.txt
@@ -0,0 +1,1 @@
+1.0.0.0 Renamed 'isoFrom' and 'isoTo' to just 'from' and 'to', flipped the type argument order to allow specifying the target type first.
diff --git a/type-iso.cabal b/type-iso.cabal
--- a/type-iso.cabal
+++ b/type-iso.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                type-iso
-version:             0.1.0.0
+version:             1.0.0.0
 synopsis:            Typeclasses for injective relations and isomorphisms between types.
 description:         This package defines \"can be cast to\" relations between types: two types a and b are an instance of Injective if there's an injective function from a to b. If there is also an injective function from b to a, a and b are instances of Iso, meaning that one can convert back and forth losslessly (up to some appropriate notion of equality). The main purpose of this little package is to provide easy casting between the common string types (String, strict/lazy Text) and numeric types (Integers, Peano numbers), without having to look up the names of the various conversion functions all the time.
 homepage:            https://github.com/ombocomp/type-iso
@@ -13,6 +13,7 @@
 category:            Data, Cast, Types
 build-type:          Simple
 cabal-version:       >=1.10
+extra-source-files:  changelog.txt
 
 source-repository head
   type:     git
@@ -20,6 +21,6 @@
 
 library
   exposed-modules:     Data.Types.Isomorphic, Data.Types.Injective
-  other-extensions:    MultiParamTypeClasses, FlexibleInstances, FlexibleContexts
+  other-extensions:    MultiParamTypeClasses, FlexibleInstances, FlexibleContexts, ExplicitForAll, GADTs
   build-depends:       base >=4.7 && <5, nats >=0.2, text >=1.1, numericpeano >= 0.2, data-default >= 0.5
   default-language:    Haskell2010
