diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,30 +1,30 @@
-Copyright (c) 2011-2012, Dan Burton
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-
-    * Neither the name of Dan Burton nor the names of other
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+Copyright (c) 2011-2012, Dan Burton
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Dan Burton nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,2 @@
-import Distribution.Simple
-main = defaultMain
+import Distribution.Simple
+main = defaultMain
diff --git a/composition.cabal b/composition.cabal
--- a/composition.cabal
+++ b/composition.cabal
@@ -1,21 +1,23 @@
-name:                composition
-version:             1.0.1.1
-synopsis:            Combinators for unorthodox function composition
-
-license:             BSD3
-license-file:        LICENSE
-author:              Dan Burton
-maintainer:          danburton.email@gmail.com
-
-category:            Data
-build-type:          Simple
-cabal-version:       >=1.8
-
-library
-  hs-source-dirs:      src
-  exposed-modules:     Data.Composition
-  extensions:          NoImplicitPrelude
-
-source-repository head
-  type:     git
-  location: git://github.com/DanBurton/composition.git
+name:                composition
+version:             1.0.2
+synopsis:            Combinators for unorthodox function composition
+
+license:             BSD3
+license-file:        LICENSE
+author:              Dan Burton
+maintainer:          danburton.email@gmail.com
+bug-reports:
+  https://github.com/DanBurton/composition/issues
+
+category:            Data
+build-type:          Simple
+cabal-version:       >=1.8
+
+library
+  hs-source-dirs:      src
+  exposed-modules:     Data.Composition
+  extensions:          NoImplicitPrelude
+
+source-repository head
+  type:     git
+  location: git://github.com/DanBurton/composition.git
diff --git a/src/Data/Composition.hs b/src/Data/Composition.hs
--- a/src/Data/Composition.hs
+++ b/src/Data/Composition.hs
@@ -1,124 +1,149 @@
--- | This module is for convenience and demonstrative purposes
--- more than it is for providing actual value.
--- I do not recommend that you rely on this module
--- for performance-sensitive code.
--- Because this module is not based on Prelude's (.),
--- some chances at optimization might be missed by your compiler.
-module Data.Composition (
-  -- * Math
-    (∘)
-  
-  -- * Colons and dots
-  , (.:)
-  , (.:.)
-  , (.::)
-  , (.::.)
-  , (.:::)
-  , (.:::.)
-  , (.::::)
-  , (.::::.)
-  
-  -- * Asterisks
-  , (.*)
-  , (.**)
-  , (.***)
-  , (.****)
-  , (.*****)
-  , (.******)
-  , (.*******)
-  , (.********)
-  
-  -- * composeN
-  , compose1
-  , compose2
-  , compose3
-  , compose4
-  , compose5
-  , compose6
-  , compose7
-  , compose8
-  , compose9
-  
-  ) where
-
--- Not exported. This is defined here to remove the dependency on base
-(.) :: (b -> c) -> (a -> b) -> a -> c
-(f . g) x = f (g x)
-
--- | The mathematical symbol for function composition.
-(∘) :: (b -> c) -> (a -> b) -> a -> c
-(∘) = (.)
-
--- | Compose two functions. @f .: g@ is similar to @f . g@
--- except that @g@ will be fed /two/ arguments instead of one
--- before handing its result to @f@.
--- 
--- This function is defined as
--- 
--- > (f .: g) x y = f (g x y)
--- 
--- Example usage:
--- 
--- > concatMap :: (a -> b) -> [a] -> [b]
--- > concatMap = concat .: map
--- 
--- Notice how /two/ arguments
--- (the function /and/ the list)
--- will be given to @map@ before the result
--- is passed to @concat@. This is equivalent to:
--- 
--- > concatMap f xs = concat (map f xs)
-(.:) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
-(f .: g) x y = f (g x y)
-
--- | Equivalent to '.:'
--- 
--- The pattern of appending asterisks is
--- straightforward to extend to similar functions:
--- (compose2 = .*, compose3 = .**, etc).
--- However, @.:@ has been commonly adopted amongst Haskellers,
--- and the need for compose3 and beyond is rare in practice.
-(.*) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
-(.*) = (.) . (.)
-
-(.**) :: (d -> e) -> (a -> b -> c -> d) -> a -> b -> c -> e
-(.**) = (.) . (.*)
-
-(.***) = (.) . (.**)
-(.****) = (.) . (.***)
-(.*****) = (.) . (.****)
-(.******) = (.) . (.*****)
-(.*******) = (.) . (.******)
-(.********) = (.) . (.*******)
-
--- | @composeN f g@ means give @g@ @N@ inputs
--- and then pass its result to @f@.
-compose1 :: (b -> c) -> (a -> b) -> a -> c
-compose1 = (.)
-
-compose2 :: (c -> d) -> (a -> b -> c) -> a -> b -> d
-compose2 = (.*)
-
-compose3 :: (d -> e) -> (a -> b -> c -> d) -> a -> b -> c -> e
-compose3 = (.**)
-
-compose4 = (.***)
-compose5 = (.****)
-compose6 = (.*****)
-compose7 = (.******)
-compose8 = (.*******)
-compose9 = (.********)
-
--- | One compact pattern for composition operators is to
--- "count the dots after the first one",
--- which begins with the common '.:', and proceeds by first
--- appending another @.@ and then replacing it with @:@
-(.:.) :: (d -> e) -> (a -> b -> c -> d) -> a -> b -> c -> e
-(.:.) = (.**)
-
-(.::) = (.***)
-(.::.) = (.****)
-(.:::) = (.*****)
-(.:::.) = (.******)
-(.::::) = (.*******)
-(.::::.) = (.********)
+-- | This module is for convenience and demonstrative purposes
+-- more than it is for providing actual value.
+-- I do not recommend that you rely on this module
+-- for performance-sensitive code.
+-- Because this module is not based on Prelude's (.),
+-- some chances at optimization might be missed by your compiler.
+module Data.Composition (
+  -- * Math
+    (∘)
+
+  -- * Colons and dots
+  , (.:)
+  , (.:.)
+  , (.::)
+  , (.::.)
+  , (.:::)
+  , (.:::.)
+  , (.::::)
+  , (.::::.)
+
+  -- * Asterisks
+  , (.*)
+  , (.**)
+  , (.***)
+  , (.****)
+  , (.*****)
+  , (.******)
+  , (.*******)
+  , (.********)
+
+  -- * composeN
+  , compose1
+  , compose2
+  , compose3
+  , compose4
+  , compose5
+  , compose6
+  , compose7
+  , compose8
+  , compose9
+
+  ) where
+
+-- Not exported. This is defined here to remove the dependency on base
+(.) :: (b -> c) -> (a -> b) -> a -> c
+(f . g) x = f (g x)
+
+infixr 9 .
+
+-- | The mathematical symbol for function composition.
+(∘) :: (b -> c) -> (a -> b) -> a -> c
+(∘) = (.)
+
+infixr 9 ∘
+
+-- | Compose two functions. @f .: g@ is similar to @f . g@
+-- except that @g@ will be fed /two/ arguments instead of one
+-- before handing its result to @f@.
+--
+-- This function is defined as
+--
+-- > (f .: g) x y = f (g x y)
+--
+-- Example usage:
+--
+-- > concatMap :: (a -> b) -> [a] -> [b]
+-- > concatMap = concat .: map
+--
+-- Notice how /two/ arguments
+-- (the function /and/ the list)
+-- will be given to @map@ before the result
+-- is passed to @concat@. This is equivalent to:
+--
+-- > concatMap f xs = concat (map f xs)
+(.:) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
+(f .: g) x y = f (g x y)
+
+infixr 8 .:
+
+-- | Equivalent to '.:'
+--
+-- The pattern of appending asterisks is
+-- straightforward to extend to similar functions:
+-- (compose2 = .*, compose3 = .**, etc).
+-- However, @.:@ has been commonly adopted amongst Haskellers,
+-- and the need for compose3 and beyond is rare in practice.
+(.*) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
+(.*) = (.) . (.)
+
+infixr 8 .*
+
+(.**) :: (d -> e) -> (a -> b -> c -> d) -> a -> b -> c -> e
+(.**) = (.) . (.*)
+
+(.***) = (.) . (.**)
+(.****) = (.) . (.***)
+(.*****) = (.) . (.****)
+(.******) = (.) . (.*****)
+(.*******) = (.) . (.******)
+(.********) = (.) . (.*******)
+
+infixr 8 .**
+infixr 8 .***
+infixr 8 .****
+infixr 8 .*****
+infixr 8 .******
+infixr 8 .*******
+infixr 8 .********
+
+
+-- | @composeN f g@ means give @g@ @N@ inputs
+-- and then pass its result to @f@.
+compose1 :: (b -> c) -> (a -> b) -> a -> c
+compose1 = (.)
+
+compose2 :: (c -> d) -> (a -> b -> c) -> a -> b -> d
+compose2 = (.*)
+
+compose3 :: (d -> e) -> (a -> b -> c -> d) -> a -> b -> c -> e
+compose3 = (.**)
+
+compose4 = (.***)
+compose5 = (.****)
+compose6 = (.*****)
+compose7 = (.******)
+compose8 = (.*******)
+compose9 = (.********)
+
+-- | One compact pattern for composition operators is to
+-- "count the dots after the first one",
+-- which begins with the common '.:', and proceeds by first
+-- appending another @.@ and then replacing it with @:@
+(.:.) :: (d -> e) -> (a -> b -> c -> d) -> a -> b -> c -> e
+(.:.) = (.**)
+
+(.::) = (.***)
+(.::.) = (.****)
+(.:::) = (.*****)
+(.:::.) = (.******)
+(.::::) = (.*******)
+(.::::.) = (.********)
+
+infixr 8 .:.
+infixr 8 .::
+infixr 8 .::.
+infixr 8 .:::
+infixr 8 .:::.
+infixr 8 .::::
+infixr 8 .::::.
