diff --git a/hasktorch-signatures-types.cabal b/hasktorch-signatures-types.cabal
new file mode 100644
--- /dev/null
+++ b/hasktorch-signatures-types.cabal
@@ -0,0 +1,39 @@
+cabal-version: 2.2
+-- * * * * * * * * * * * * WARNING * * * * * * * * * * * *
+-- This file has been AUTO-GENERATED by dhall-to-cabal.
+--
+-- Do not edit it by hand, because your changes will be over-written!
+--
+-- Instead, edit the source Dhall file, namely
+-- 'signatures/types/hasktorch-signatures-types.dhall', and re-generate this file by running
+-- 'dhall-to-cabal -- signatures/types/hasktorch-signatures-types.dhall > hasktorch-signatures-types.cabal'.
+-- * * * * * * * * * * * * WARNING * * * * * * * * * * * *
+name: hasktorch-signatures-types
+version: 0.0.1.0
+license: BSD-3-Clause
+maintainer: Sam Stites <fnz@fgvgrf.vb>, Austin Huang <nhfgvau@nyhz.zvg.rqh> - cipher:ROT13
+author: Hasktorch dev team
+homepage: https://github.com/hasktorch/hasktorch#readme
+bug-reports: https://github.com/hasktorch/hasktorch/issues
+synopsis: Core types for Hasktorch backpack signatures
+description:
+    This package includes core signature types to abstract over the hasktorch-types-* packages.
+category: Tensors, Machine Learning, AI
+build-type: Simple
+
+source-repository head
+    type: git
+    location: https://github.com/hasktorch/hasktorch
+
+library
+    signatures: Torch.Sig.State
+                Torch.Sig.Types
+                Torch.Sig.Types.Global
+                Torch.Sig.Tensor.Memory
+                Torch.Sig.Storage.Memory
+    hs-source-dirs: src
+    default-language: Haskell2010
+    build-depends:
+        base (==4.7 || >4.7) && <5,
+        deepseq ==1.3.0 || >1.3.0
+
diff --git a/src/Torch/Sig/State.hsig b/src/Torch/Sig/State.hsig
new file mode 100644
--- /dev/null
+++ b/src/Torch/Sig/State.hsig
@@ -0,0 +1,22 @@
+-------------------------------------------------------------------------------
+-- |
+-- Module    :  Torch.Sig.State
+-- Copyright :  (c) Sam Stites 2017
+-- License   :  BSD3
+-- Maintainer:  sam@stites.io
+-- Stability :  experimental
+-- Portability: non-portable
+--
+-- Signatures which relate to creating State and is _not_ involving in a
+-- state's definition.
+-------------------------------------------------------------------------------
+signature Torch.Sig.State where
+
+import Foreign
+import Torch.Sig.Types.Global
+
+torchstate :: ForeignPtr CState
+
+-- newCState :: IO (Ptr CState)
+-- manageState :: Ptr CState -> IO (ForeignPtr CState)
+
diff --git a/src/Torch/Sig/Storage/Memory.hsig b/src/Torch/Sig/Storage/Memory.hsig
new file mode 100644
--- /dev/null
+++ b/src/Torch/Sig/Storage/Memory.hsig
@@ -0,0 +1,7 @@
+signature Torch.Sig.Storage.Memory where
+
+import Foreign
+import Torch.Sig.Types
+import Torch.Sig.Types.Global
+
+p_free :: FunPtr (Ptr CState -> Ptr CStorage -> IO ())
diff --git a/src/Torch/Sig/Tensor/Memory.hsig b/src/Torch/Sig/Tensor/Memory.hsig
new file mode 100644
--- /dev/null
+++ b/src/Torch/Sig/Tensor/Memory.hsig
@@ -0,0 +1,7 @@
+signature Torch.Sig.Tensor.Memory where
+
+import Foreign
+import Torch.Sig.Types
+import Torch.Sig.Types.Global
+
+p_free :: FunPtr (Ptr CState -> Ptr CTensor -> IO ())
diff --git a/src/Torch/Sig/Types.hsig b/src/Torch/Sig/Types.hsig
new file mode 100644
--- /dev/null
+++ b/src/Torch/Sig/Types.hsig
@@ -0,0 +1,84 @@
+{-# LANGUAGE KindSignatures #-}
+{-# LANGUAGE DataKinds #-}
+signature Torch.Sig.Types where
+
+import Foreign
+import Foreign.Storable
+import GHC.TypeLits (Nat)
+import Torch.Sig.Types.Global as X
+import Control.DeepSeq
+import Text.Printf
+
+-- all C-types
+data CTensor
+instance Eq CTensor
+data CStorage
+instance Eq CStorage
+
+-- freeStorage :: Ptr CState -> Ptr CStorage -> IO ()
+-- freeTensor  :: Ptr CState -> Ptr CTensor -> IO ()
+
+-- all haskell, memory-managed types
+data Dynamic
+instance Eq Dynamic
+ctensor         :: Dynamic -> ForeignPtr CTensor
+dynamic         :: ForeignPtr CState -> ForeignPtr CTensor -> Dynamic
+dynamicState    :: Dynamic -> (ForeignPtr CState, ForeignPtr CTensor)
+dynamicStateRef :: Dynamic -> ForeignPtr CState
+
+data Storage
+instance Eq Storage
+cstorage        :: Storage -> ForeignPtr CStorage
+storage         :: ForeignPtr CState -> ForeignPtr CStorage -> Storage
+storageState    :: Storage -> (ForeignPtr CState, ForeignPtr CStorage)
+storageStateRef :: Storage -> ForeignPtr CState
+
+data Tensor (d::[Nat])
+instance Eq (Tensor d)
+asStatic  :: Dynamic -> Tensor d
+asDynamic :: Tensor d -> Dynamic
+
+data CReal
+instance Num  CReal
+instance Show CReal
+instance Storable CReal
+instance NFData CReal
+-- instance PrintfArg CReal
+
+data CAccReal
+instance Num  CAccReal
+instance Show CAccReal
+instance Storable CAccReal
+instance NFData CAccReal
+-- instance PrintfArg CAccReal
+
+data HsReal
+instance Num  HsReal
+instance Show HsReal
+instance Ord HsReal
+instance NFData HsReal
+instance PrintfArg HsReal
+
+-- FIXME: Consider how we will add things that are Fractional-specific in the
+-- NN package like xavier instantiation.
+--
+-- instance Fractional HsReal
+
+data HsAccReal
+instance Num  HsAccReal
+instance Show HsAccReal
+instance Ord HsAccReal
+instance NFData HsAccReal
+instance PrintfArg HsAccReal
+
+real2acc :: HsReal -> HsAccReal
+acc2real :: HsAccReal -> HsReal
+
+hs2cReal :: HsReal -> CReal
+hs2cAccReal :: HsAccReal -> CAccReal
+
+c2hsReal :: CReal -> HsReal
+c2hsAccReal :: CAccReal -> HsAccReal
+
+-- i2hsReal :: Integral i => i -> HsReal
+
diff --git a/src/Torch/Sig/Types/Global.hsig b/src/Torch/Sig/Types/Global.hsig
new file mode 100644
--- /dev/null
+++ b/src/Torch/Sig/Types/Global.hsig
@@ -0,0 +1,154 @@
+{-# LANGUAGE KindSignatures #-}
+{-# LANGUAGE DataKinds #-}
+
+signature Torch.Sig.Types.Global where
+
+import Foreign
+import GHC.TypeLits
+import Data.Kind
+
+data CState
+data State
+asState :: ForeignPtr CState -> State
+asForeign :: State -> ForeignPtr CState
+
+-- all Globals variants
+data CAllocator
+data Allocator
+
+data CDescBuff
+data DescBuff
+descBuff :: Ptr CDescBuff -> IO DescBuff
+
+-- for RNG
+data CGenerator
+data Generator
+rng :: Generator -> ForeignPtr CGenerator
+generatorToRng :: ForeignPtr CGenerator -> Generator
+
+-- any quirky splits between TH (CInt) and THC (CLLong)
+data CInt'
+instance Integral CInt'
+instance Num CInt'
+instance Ord CInt'
+instance Enum CInt'
+instance Bounded CInt'
+
+-- aliases
+type CMaskTensor = CByteTensor
+type CIndexTensor = CLongTensor
+type CIndexStorage = CLongStorage
+
+type MaskTensor = (ByteTensor :: [Nat] -> Type)
+type MaskDynamic = ByteDynamic
+type IndexTensor = (LongTensor :: [Nat] -> Type)
+type IndexDynamic = LongDynamic
+type IndexStorage = LongStorage
+
+-- unsigned types
+data CByteTensor
+data ByteTensor (d::[Nat])
+byteAsDynamic :: ByteTensor (d::[Nat]) -> ByteDynamic
+byteAsStatic  :: ByteDynamic -> ByteTensor (d::[Nat])
+data ByteDynamic
+byteDynamicState    :: ByteDynamic -> (ForeignPtr CState, ForeignPtr CByteTensor)
+byteDynamic  :: ForeignPtr CState -> ForeignPtr CByteTensor -> ByteDynamic
+
+data CByteStorage
+data ByteStorage
+byteStorageState :: ByteStorage -> (ForeignPtr CState, ForeignPtr CByteStorage)
+byteStorage  :: ForeignPtr CState -> ForeignPtr CByteStorage -> ByteStorage
+
+data CCharTensor
+data CharTensor (d::[Nat])
+charAsDynamic :: CharTensor (d::[Nat]) -> CharDynamic
+charAsStatic  :: CharDynamic -> CharTensor (d::[Nat])
+data CharDynamic
+charDynamicState    :: CharDynamic -> (ForeignPtr CState, ForeignPtr CCharTensor)
+charDynamic  :: ForeignPtr CState -> ForeignPtr CCharTensor -> CharDynamic
+
+data CCharStorage
+data CharStorage
+charStorageState :: CharStorage -> (ForeignPtr CState, ForeignPtr CCharStorage)
+charStorage  :: ForeignPtr CState -> ForeignPtr CCharStorage -> CharStorage
+
+-- Signed types
+data CLongTensor
+data LongTensor (d::[Nat])
+longAsDynamic :: LongTensor (d::[Nat]) -> LongDynamic
+longAsStatic  :: LongDynamic -> LongTensor (d::[Nat])
+data LongDynamic
+longDynamicState   :: LongDynamic -> (ForeignPtr CState, ForeignPtr CLongTensor)
+longDynamic :: ForeignPtr CState -> ForeignPtr CLongTensor -> LongDynamic
+
+data CLongStorage
+data LongStorage
+longStorageState :: LongStorage -> (ForeignPtr CState, ForeignPtr CLongStorage)
+longStorage  :: ForeignPtr CState -> ForeignPtr CLongStorage -> LongStorage
+
+data CShortTensor
+data ShortTensor (d::[Nat])
+shortAsDynamic :: ShortTensor (d::[Nat]) -> ShortDynamic
+shortAsStatic  :: ShortDynamic -> ShortTensor (d::[Nat])
+data ShortDynamic
+shortDynamicState  :: ShortDynamic -> (ForeignPtr CState, ForeignPtr CShortTensor)
+shortDynamic       :: ForeignPtr CState -> ForeignPtr CShortTensor -> ShortDynamic
+
+data CShortStorage
+data ShortStorage
+shortStorageState  :: ShortStorage -> (ForeignPtr CState, ForeignPtr CShortStorage)
+shortStorage       :: ForeignPtr CState -> ForeignPtr CShortStorage -> ShortStorage
+
+data CIntTensor
+data IntTensor (d::[Nat])
+intAsDynamic :: IntTensor (d::[Nat]) -> IntDynamic
+intAsStatic  :: IntDynamic -> IntTensor (d::[Nat])
+data IntDynamic
+intDynamicState   :: IntDynamic -> (ForeignPtr CState, ForeignPtr CIntTensor)
+intDynamic :: ForeignPtr CState -> ForeignPtr CIntTensor -> IntDynamic
+
+data CIntStorage
+data IntStorage
+intStorageState :: IntStorage -> (ForeignPtr CState, ForeignPtr CIntStorage)
+intStorage  :: ForeignPtr CState -> ForeignPtr CIntStorage -> IntStorage
+
+-- Floating types
+data CFloatTensor
+data FloatTensor (d::[Nat])
+floatAsDynamic :: FloatTensor (d::[Nat]) -> FloatDynamic
+floatAsStatic  :: FloatDynamic -> FloatTensor (d::[Nat])
+data FloatDynamic
+floatDynamicState :: FloatDynamic -> (ForeignPtr CState, ForeignPtr CFloatTensor)
+floatDynamic :: ForeignPtr CState -> ForeignPtr CFloatTensor -> FloatDynamic
+
+data CFloatStorage
+data FloatStorage
+floatStorageState :: FloatStorage -> (ForeignPtr CState, ForeignPtr CFloatStorage)
+floatStorage  :: ForeignPtr CState -> ForeignPtr CFloatStorage -> FloatStorage
+
+data CDoubleTensor
+data DoubleTensor (d::[Nat])
+doubleAsDynamic :: DoubleTensor (d::[Nat]) -> DoubleDynamic
+doubleAsStatic  :: DoubleDynamic -> DoubleTensor (d::[Nat])
+data DoubleDynamic
+doubleDynamicState   :: DoubleDynamic -> (ForeignPtr CState, ForeignPtr CDoubleTensor)
+doubleDynamic :: ForeignPtr CState -> ForeignPtr CDoubleTensor -> DoubleDynamic
+
+data CDoubleStorage
+data DoubleStorage
+doubleStorageState :: DoubleStorage -> (ForeignPtr CState, ForeignPtr CDoubleStorage)
+doubleStorage  :: ForeignPtr CState -> ForeignPtr CDoubleStorage -> DoubleStorage
+
+{-
+data CHalfTensor
+data HalfDynamic
+halfCTensor   :: HalfDynamic -> ForeignPtr CHalfTensor
+halfDynamic :: ForeignPtr CHalfTensor -> HalfDynamic
+
+data CHalfStorage
+data HalfStorage
+halfCStorage :: HalfStorage -> (ForeignPtr CHalfStorage, ForeignPtr CState)
+halfStorage  :: ForeignPtr CHalfStorage -> HalfStorage
+-}
+
+
