diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,25 @@
+Copyright © 2009 Wolfgang Jeltsch
+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 the copyright holders nor the names of the 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 HOLDERS 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.lhs b/Setup.lhs
new file mode 100644
--- /dev/null
+++ b/Setup.lhs
@@ -0,0 +1,4 @@
+#!/usr/bin/env runghc
+
+> import Distribution.Simple
+> main = defaultMain
diff --git a/fraction.cabal b/fraction.cabal
new file mode 100644
--- /dev/null
+++ b/fraction.cabal
@@ -0,0 +1,25 @@
+Name:          fraction
+Version:       0.0.0.0
+Cabal-Version: >= 1.2
+Build-Type:    Simple
+License:       BSD3
+License-File:  LICENSE
+Copyright:     © 2009 Wolfgang Jeltsch
+Author:        Wolfgang Jeltsch
+Maintainer:    jeltsch@informatik.tu-cottbus.de
+Stability:     provisional
+Homepage:      http://community.haskell.org/~jeltsch/fraction/
+Package-URL:   http://hackage.haskell.org/packages/archive/fraction/0.0.0.0/fraction-0.0.0.0.tar.gz
+Synopsis:      Fractions
+Description:   This package provides a data type whose values represent fractions.
+               .
+               A fraction can be seen as a real number from the closed interval [0,1]. It can also
+               be seen as a percentage.
+Category:      Data
+Tested-With:   GHC == 6.10.1
+
+Library
+    Build-Depends:   algebra >= 0.0 && < 0.1,
+                     base    >= 3.0 && < 4.1
+    Exposed-Modules: Data.Fraction
+    HS-Source-Dirs:  src
diff --git a/src/Data/Fraction.hs b/src/Data/Fraction.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Fraction.hs
@@ -0,0 +1,64 @@
+{-|
+    This module is about fractions.
+
+    A fraction can be seen as a real number from the closed interval [0,1]. It can also be seen as a
+    percentage. A typical example of a fraction is the extend of a progress bar.
+-}
+module Data.Fraction (
+
+    -- * Fraction type
+    Fraction,
+
+    -- * Conversion
+    fromFactor,
+    fromPercentage,
+    toFactor,
+    toPercentage
+
+) where
+
+    -- Data
+    import Data.Semigroup as Semigroup
+    import Data.Monoid    as Monoid
+
+    -- * Fraction type
+    -- |A fraction.
+    newtype Fraction = Fraction Double
+
+    instance Semigroup Fraction where
+
+        Fraction factor1 `append` Fraction factor2 = Fraction (factor1 * factor2)
+
+    instance Monoid Fraction where
+
+        mempty = Fraction 1
+
+        mappend = append
+
+    -- * Conversion
+    {-|
+        Converts a factor into its corresponding fraction.
+
+        If the factor is not from the interval [0,1], a runtime error occurs.
+    -}
+    fromFactor :: Double -> Fraction
+    fromFactor factor | factor >= 0 && factor <= 1 = Fraction factor
+                      | otherwise                  = error "fraction: factor out of bounds"
+
+    {-|
+        Converts a percentage into its corresponding fraction.
+
+        If the percentage is not from the interval [0,100], a runtime error occurs.
+    -}
+    fromPercentage :: Double -> Fraction
+    fromPercentage perc | perc >= 0 && perc <= 100 = Fraction (perc / 100)
+                        | otherwise                = error "fraction: percentage out of bounds"
+
+    -- |Converts a fraction into its corresponding factor.
+    toFactor :: Fraction -> Double
+    toFactor (Fraction factor) = factor
+
+    -- |Converts a fraction into its corresponding percentage.
+    toPercentage :: Fraction -> Double
+    toPercentage (Fraction factor) = factor * 100
+
