diff --git a/liquid.cabal b/liquid.cabal
--- a/liquid.cabal
+++ b/liquid.cabal
@@ -1,5 +1,5 @@
 name:                  liquid
-version:               0.1.0.2
+version:               0.1.0.3
 synopsis:              Liquid template language library
 description:           Parser, interpreter and assorted functions for the Liquid template language
 license:               BSD3
@@ -34,6 +34,7 @@
   build-depends:       attoparsec           >=0.13.1.0 && <0.14,
                        aeson                >=0.11.2.1 && <0.12,
                        base                 >=4.9.0.0  && <5.0,
+                       hashable             >=1.2.4.0  && <1.3,
                        lens                 >=4.14     && <4.15,
                        lens-aeson           >=1.0.0.5  && <1.1,
                        mtl                  >=2.2.1    && <2.3,
diff --git a/src/Text/Liquid/Types.hs b/src/Text/Liquid/Types.hs
--- a/src/Text/Liquid/Types.hs
+++ b/src/Text/Liquid/Types.hs
@@ -1,13 +1,16 @@
+{-# LANGUAGE DeriveGeneric   #-}
 {-# LANGUAGE TemplateHaskell #-}
 
 module Text.Liquid.Types where
 
 import           Control.Lens.TH    (makePrisms)
 import           Data.Aeson.Types   (Value)
+import           Data.Hashable      (Hashable)
 import           Data.List.NonEmpty (NonEmpty)
 import           Data.Scientific    (Scientific)
 import           Data.Text          (Text)
 import           Data.Validation    (AccValidation)
+import           GHC.Generics       (Generic)
 
 
 --------------------------------------------------------------------------------
@@ -19,7 +22,9 @@
 data VarIndex
   = ObjectIndex Text
   | ArrayIndex Int
-  deriving (Eq, Ord, Show)
+  deriving (Eq, Ord, Show, Generic)
+
+instance Hashable VarIndex
 
 data Expr
   = Noop
