diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,31 @@
+FFunctor
+
+Copyright 2019, Sam Halliday
+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 name of the University nor the names of its contributors may be
+used to endorse or promote products derived from this software without
+specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF
+GLASGOW AND THE 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
+UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE 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/ffunctor.cabal b/ffunctor.cabal
new file mode 100644
--- /dev/null
+++ b/ffunctor.cabal
@@ -0,0 +1,33 @@
+cabal-version:       2.2
+name:                ffunctor
+version:             1.0.0
+synopsis:            FFunctor typeclass
+license:             BSD-3-Clause
+license-file:        LICENSE
+author:              Sam Halliday
+maintainer:          Sam Halliday
+copyright:           2019 Sam Halliday
+bug-reports:         https://gitlab.com/fommil/fommil/merge_requests
+tested-with:         GHC ^>= 8.4.4 || ^>= 8.6.3
+category:            Constraints
+description:
+  Micro library with a Higher kinded Functor in the spirit of HFunctor,
+  MFunctor and MonadTrans.
+  .
+  Useful to map over the type parameter in a record of
+  functions, e.g. https://www.benjamin.pizza/posts/2017-12-15-functor-functors.html
+
+source-repository head
+  type: git
+  location: https://gitlab.com/fommil/ffunctor
+   
+common deps
+  build-depends:    , base ^>= 4.11.1.0 || ^>= 4.12.0.0
+  ghc-options:        -Wall
+                      -Werror=missing-home-modules
+  default-language:   Haskell2010
+
+library
+  import:             deps
+  hs-source-dirs:     library
+  exposed-modules:    Data.FFunctor
diff --git a/library/Data/FFunctor.hs b/library/Data/FFunctor.hs
new file mode 100644
--- /dev/null
+++ b/library/Data/FFunctor.hs
@@ -0,0 +1,11 @@
+{-# LANGUAGE ExplicitForAll #-}
+{-# LANGUAGE KindSignatures #-}
+
+-- | Functor of Functors
+module Data.FFunctor where
+
+class FFunctor (f :: (* -> *) -> *) where
+--ffmap :: (Functor m, Functor n) => (m ~> n) -> f m -> f n
+  ffmap :: forall m n a . (Functor m, Functor n) => (m a -> n a) -> f m -> f n
+
+-- TODO is there anything from stdlib that could have an instance?
