diff --git a/ChangeLog.md b/ChangeLog.md
new file mode 100644
--- /dev/null
+++ b/ChangeLog.md
@@ -0,0 +1,5 @@
+# Revision history for vector-doublezip
+
+## 0.1.0.0 -- 2020-06-01
+
+* First version. Released on an unsuspecting world.
diff --git a/Data/Vector/DoubleZip.hs b/Data/Vector/DoubleZip.hs
new file mode 100644
--- /dev/null
+++ b/Data/Vector/DoubleZip.hs
@@ -0,0 +1,73 @@
+-- |
+-- Module      :  Data.Vector.DoubleZip
+-- Copyright   :  (c) OleksandrZhabenko 2020
+-- License     :  MIT
+-- Stability   :  Experimental
+-- Maintainer  :  olexandr543@yahoo.com
+--
+-- Some special functions to work with Vector (with zip).
+
+{-# OPTIONS_GHC -threaded #-}
+
+module Data.Vector.DoubleZip (
+  normFst
+  , normSnd
+  , evalFstFV
+  , evalFstFVM
+  , evalSndFV
+  , evalSndFVM
+) where
+
+import qualified Data.Vector as V
+
+-- | Norms a tuples in a 'V.Vector' by their first elements so that the greatest by an absolute value first element is equal to 1 (or -1). If all the first 
+-- elements are zeros then prints a warning message and exits successfully.
+normFst :: (Fractional a, Ord a) => V.Vector (a, b) -> IO (V.Vector (a, b))
+normFst v 
+ | V.all (\(x,_) -> x == 0) v = putStrLn "Warning: Data.Vector.DoubleZip.normFst: Vector with all zero first parts of the elements." >> return v
+ | otherwise = V.mapM (\(x,y) -> return (x / abs (V.maximumBy (\t u -> compare (abs t) (abs u)) . V.map fst $ v),y)) v
+
+-- | Norms a tuples in a 'V.Vector' by their second elements so that the greatest by an absolute value second element is equal to 1 (or -1). If all the second 
+-- elements are zeros then prints a warning message and exits successfully.
+normSnd :: (Fractional b, Ord b) => V.Vector (a, b) -> IO (V.Vector (a, b))
+normSnd v 
+ | V.all (\(_,y) -> y == 0) v = putStrLn "Warning: Data.Vector.DoubleZip.normSnd: Vector with all zero second parts of the elements." >> return v
+ | otherwise = V.mapM (\(x,y) -> return (x,y / abs (V.maximumBy (\t u -> compare (abs t) (abs u)) . V.map snd $ v))) v
+
+-- | A special function transformation to obtain the resulting 'V.Vector' so that its first elements in the inner tuples are in a special way 
+-- normed to 1 (or -1) by 'normFst' and the inner tuples are sequenced one by another as a 2D points of the generating function @f :: a -> b@. 
+-- To obtain non-empty result the given second argument must have at least two elements.
+evalFstFV :: (Fractional a, Ord a) => (a -> b) -> V.Vector a -> IO (V.Vector ((a, b), (a, b)))
+evalFstFV f v 
+  | compare (V.length v) 1 == GT = do
+     zipped <- normFst . V.zip v $ V.map f v
+     return . V.zip zipped . V.unsafeSlice 1 (V.length v - 1) $ zipped
+  | otherwise = return V.empty     
+
+-- | The same as 'evalFstFV' but uses a monadic IO function f.
+evalFstFVM :: (Fractional a, Ord a) => (a -> IO b) -> V.Vector a -> IO (V.Vector ((a, b), (a, b)))
+evalFstFVM f v 
+  | compare (V.length v) 1 == GT = do
+     v1 <- V.mapM f v
+     zipped <- normFst . V.zip v $ v1
+     return . V.zip zipped . V.unsafeSlice 1 (V.length v - 1) $ zipped
+  | otherwise = return V.empty
+
+-- | A special function transformation to obtain the resulting 'V.Vector' so that its second elements in the inner tuples are in a special way 
+-- normed to 1 (or -1) by 'normSnd' and the inner tuples are sequenced one by another as a 2D points of the generating function @f :: a -> b@. 
+-- To obtain non-empty result the given second argument must have at least two elements. Is similar to 'evalFstFV'.
+evalSndFV :: (Fractional b, Ord b) => (a -> b) -> V.Vector a -> IO (V.Vector ((a, b), (a, b)))
+evalSndFV f v 
+  | compare (V.length v) 1 == GT = do
+     zipped <- normSnd . V.zip v $ V.map f v
+     return . V.zip zipped . V.unsafeSlice 1 (V.length v - 1) $ zipped
+  | otherwise = return V.empty     
+
+-- | The same as 'evalSndFV' but uses a monadic IO function f.
+evalSndFVM :: (Fractional b, Ord b) => (a -> IO b) -> V.Vector a -> IO (V.Vector ((a, b), (a, b)))
+evalSndFVM f v 
+  | compare (V.length v) 1 == GT = do
+     v1 <- V.mapM f v
+     zipped <- normSnd . V.zip v $ v1
+     return . V.zip zipped . V.unsafeSlice 1 (V.length v - 1) $ zipped
+  | otherwise = return V.empty
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2020 OleksandrZhabenko
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/vector-doublezip.cabal b/vector-doublezip.cabal
new file mode 100644
--- /dev/null
+++ b/vector-doublezip.cabal
@@ -0,0 +1,25 @@
+-- Initial vector-doublezip.cabal generated by cabal init.  For further
+-- documentation, see http://haskell.org/cabal/users-guide/
+
+name:                vector-doublezip
+version:             0.1.0.0
+synopsis:            Some special functions to work with Vector (with zip).
+description:         Uses normalizitions inside for the tuples. Can be used to generate a Vector of 2D function points.
+homepage:            https://hackage.haskell.org/package/vector-doublezip
+license:             MIT
+license-file:        LICENSE
+author:              OleksandrZhabenko
+maintainer:          olexandr543@yahoo.com
+-- copyright:
+category:            Data
+build-type:          Simple
+extra-source-files:  ChangeLog.md
+cabal-version:       >=1.10
+
+library
+  exposed-modules:     Data.Vector.DoubleZip
+  -- other-modules:
+  -- other-extensions:
+  build-depends:       base >=4.7 && <4.15, vector >=0.11 && <0.14
+  -- hs-source-dirs:
+  default-language:    Haskell2010
