diff --git a/HNumeric.cabal b/HNumeric.cabal
--- a/HNumeric.cabal
+++ b/HNumeric.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: ec536934e686c8d7a1fa05bae8aa48636246af47efadc6019e11a8d8c8b0fd63
+-- hash: 3e62d8d2cc17a8f3e541031e3eb49a7cd3da4b6da8e7837ff11ff044e7b895f1
 
 name:           HNumeric
-version:        0.2.1.0
+version:        0.3.0.0
 synopsis:       Haskell Numeric Library with pure functionality, R & MATLAB Syntax.
 description:    Please see the README on GitHub at <https://github.com/Axect/HNumeric#readme>
 category:       HNum, library, Numeric, LinearAlgebra, Statistics, bsd3
@@ -37,19 +37,7 @@
   build-depends:
       base >=4.7 && <5
     , normaldistribution
-  default-language: Haskell2010
-
-executable HNumeric-exe
-  main-is: Main.hs
-  other-modules:
-      Paths_HNumeric
-  hs-source-dirs:
-      app
-  ghc-options: -threaded -rtsopts -with-rtsopts=-N
-  build-depends:
-      HNumeric
-    , base >=4.7 && <5
-    , normaldistribution
+    , random
   default-language: Haskell2010
 
 test-suite HNumeric-test
@@ -64,4 +52,5 @@
       HNumeric
     , base >=4.7 && <5
     , normaldistribution
+    , random
   default-language: Haskell2010
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -9,16 +9,7 @@
 
 ## Installation
 
-### 1. Native Use
-
-You can use this package just change `app/Main.hs`
-Then, just type next command
-
-```bash
-git clone https://github.com/Axect/HNumeric
-```
-
-### 2. Cabal Install
+### 1. Cabal Install
 
 ```sh
 cabal update
@@ -27,7 +18,7 @@
 
 That's all!
 
-### 3. Import to Stack project
+### 2. Import to Stack project
 
 If you use this package to your own project, then you should change `stack.yaml` and `package.yaml`
 
diff --git a/app/Main.hs b/app/Main.hs
deleted file mode 100644
--- a/app/Main.hs
+++ /dev/null
@@ -1,12 +0,0 @@
-module Main where
-
-import           HNum.Vector
-import           HNum.Stats
-import           Data.Random.Normal
-
-main :: IO ()
-main = do
-  let a = Vector [1, 3, 4]
-  print a
-  print $ map ($ a) [mean, var, std]
-
diff --git a/src/HNum/Stats.hs b/src/HNum/Stats.hs
--- a/src/HNum/Stats.hs
+++ b/src/HNum/Stats.hs
@@ -1,31 +1,72 @@
+{-
+Module      : HNumeric.Stats
+Description : Haskell Statistics Library with HNum.Vector
+CopyRight   : (c) Tae Geun Kim, 2018
+License     : BSD3
+Maintainer  : edeftg@gmail.com
+Stability   : Experimental
+-}
 module HNum.Stats where
 
 import           HNum.Vector
+import           Data.Random.Normal
+import           System.Random
 
+-- | To contain coefficients of linear regression.
 type Coeff a = (a, a)
+--------------------------------------------------------
+-- Basic Probability
+--------------------------------------------------------
 
--- | Expectation Value
-mean :: Fractional a => Vector a -> a
-mean v = sum v / fromIntegral (length v)
+-- | Factorial
+fac :: Integral a => a -> a
+fac 0 = 1
+fac 1 = 1
+fac n = product [1 .. n]
 
--- | Covariance (Single-Valued)
-cov' :: Floating a => Vector a -> Vector a -> a
-cov' x y
-  | length x <= 1 || length y <= 1 = error "Samples are not enough"
-  | length x /= length y = error "Length is not same"
-  | otherwise = ((x .- mean x) .*. (y .- mean y)) / fromIntegral (length x - 1)
+-- | Factorial with start n,end s
+facStop :: Integral a => a -> a -> a
+facStop n s = product [s .. n]
 
--- | Variance
-var :: Floating a => Vector a -> a
-var v = cov' v v
+-- | Permutation
+p :: Integral a => a -> a -> a
+n `p` r = facStop n (n - r + 1)
 
--- | Standard Deviation
-std :: Floating a => Vector a -> a
-std = sqrt . var
+-- | Combination using permutation
+c :: Integral a => a -> a -> a
+n `c` r = (n `p` r) `div` fac r
 
--- | Covariance Matrix
-cov :: Floating a => Vector a -> Vector a -> Matrix a
-cov x y = matrix [[var x, cov' x y], [cov' y x, var y]]
+
+
+--------------------------------------------------------
+-- Basic Statistics
+--------------------------------------------------------
+-- | Basic Statistics Class for Vector
+class VecOps v => Statistical v where
+  mean :: Fractional a => v a -> a
+  -- | Single Valued covariance
+  cov' :: Floating a => v a -> v a -> a
+  -- | Covariance Matrix
+  cov :: Floating a => v a -> v a -> Matrix a
+  var :: Floating a => v a -> a
+  std :: Floating a => v a -> a
+  -- | Correlation Coefficient
+  cor :: Floating a => v a -> v a -> a
+
+instance Statistical Vector where
+  mean x = sum x / fromIntegral (length x)
+  cov' x y
+    | length x <= 1 || length y <= 1 = error "Samples are not enough"
+    | length x /= length y = error "Length is not same"
+    | otherwise = ((x .- mean x) .*. (y .- mean y)) / fromIntegral (length x - 1)
+  cov x y = matrix [[var x, cov' x y], [cov' y x, var y]]
+  var v = cov' v v
+  std = sqrt . var
+  cor x y = cov' x y / (std x * std y)
+
+--------------------------------------------------------
+-- Distribution  
+--------------------------------------------------------
 
 -- | Least Square Method - (Intercept, Slope)
 lm :: Floating a => Vector a -> Vector a -> Coeff a
diff --git a/src/HNum/Vector.hs b/src/HNum/Vector.hs
--- a/src/HNum/Vector.hs
+++ b/src/HNum/Vector.hs
@@ -2,9 +2,9 @@
 Module      : HNumeric.Vector
 Description : Haskell Vector & Matrix & Linear Algebra Library to do machine learning
 CopyRight   : (c) Tae Geun Kim, 2018
-License     : GPL-3
+License     : BSD3
 Maintainer  : edeftg@gmail.com
-Stability   : Experimental
+Stability   : Stable
 -}
 module HNum.Vector where
 
@@ -178,9 +178,9 @@
 -}
 class Functor f => MatOps f where
   (%*%) :: Num a => f a -> f a -> f a
-  (%/%) :: Fractional a => f a -> f a -> f a
-  det :: Fractional a => f a -> a
-  inv :: Fractional a => f a -> f a
+  (%/%) :: (Eq a, Fractional a) => f a -> f a -> f a
+  det :: (Eq a, Fractional a) => f a -> a
+  inv :: (Eq a, Fractional a) => f a -> f a
   transpose :: f a -> f a
 
 instance VecOps Vector where
@@ -352,6 +352,9 @@
 colMaxIdx :: Ord a => [[a]] -> Int -> Int
 colMaxIdx m n = whichMax $ colMat m n
 
+cycleMat :: [[a]] -> [[a]]
+cycleMat (m : ms) = ms ++ [m]
+
 -- | Another Block Partitioning
 bpMat' :: Int -> [[a]] -> [[a]]
 bpMat' _ []  = []
@@ -364,10 +367,11 @@
   where l = length m - 1
 
 -- | Determinant for Double List - Order ~ 4^n
-detMat :: Fractional a => [[a]] -> a
+detMat :: (Eq a, Fractional a) => [[a]] -> a
 detMat [[x]] = x
 detMat m
   | l == 2    = detMat m11 * detMat m22 - detMat m12 * detMat m21
+  | d00 == 0  = (-1) ^ (l - 1) * detMat (cycleMat m)
   | otherwise = (detMat m11 * detMat m22 - detMat m12 * detMat m21) / detMat m00
  where
   l   = length m
@@ -376,12 +380,13 @@
   m21 = bpMat' 3 m
   m22 = bpMat' 4 m
   m00 = bpMat' 0 m
+  d00 = detMat m00
 
 -- | Inverse for Double List - Order ~ n * 2^n
-invMat :: Fractional a => [[a]] -> [[a]]
+invMat :: (Eq a, Fractional a) => [[a]] -> [[a]]
 invMat []    = []
 invMat [[] ] = [[]]
-invMat [[x]] = [[x]]
+invMat [[x]] = [[1 / x]]
 invMat m
   | length m == 2
   = map (map (/ detMat m))
