diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## Version 0.1.1
+
+- Ord isntances ([@nhibberd][nhibberd])
+
 ## Version 0.1
 
 - Initial Packer types ([@nhibberd][nhibberd])
diff --git a/kerry.cabal b/kerry.cabal
--- a/kerry.cabal
+++ b/kerry.cabal
@@ -1,7 +1,7 @@
 name:
   kerry
 version:
-  0.1
+  0.1.1
 homepage:
   https://github.com/nhibberd/kerry#readme
 bug-reports:
diff --git a/src/Kerry/Builder/AmazonEC2.hs b/src/Kerry/Builder/AmazonEC2.hs
--- a/src/Kerry/Builder/AmazonEC2.hs
+++ b/src/Kerry/Builder/AmazonEC2.hs
@@ -36,14 +36,14 @@
     AWSProfile Text
   | EnvironmentVariables
   -- TODO explicit keys?
-    deriving (Eq, Show)
+    deriving (Eq, Ord, Show)
 
 data AWS x =
   AWS {
       awsRegion :: Text
     , awsCredentials :: Credentials
     , awsBuilder :: x
-    } deriving (Eq, Show)
+    } deriving (Eq, Ord, Show)
 
 fromAWS :: (a -> [Aeson.Pair]) -> AWS a -> [Aeson.Pair]
 fromAWS fromBuilder (AWS region creds builder) =
@@ -60,13 +60,13 @@
 data SourceAmi =
     SourceAmiId Text
   | SourceAmiFilter (Map SourceAmiFilterKey Text) AWSAmiOwner Bool
-    deriving (Eq, Show)
+    deriving (Eq, Ord, Show)
 
 data AWSAmiOwner =
     Accounts [Text]
   | Self
   | Alias Text
-    deriving (Eq, Show)
+    deriving (Eq, Ord, Show)
 
 data SourceAmiFilterKey =
   -- | The image architecture (i386 | x86_64).
@@ -131,8 +131,8 @@
   | TagKey
   -- | The virtualization type (paravirtual | hvm).
   | VirtualizationType
---    deriving (Eq, Show, Enum, Bounded)
-    deriving (Eq, Show)
+--    deriving (Eq, Ord, Show, Enum, Bounded)
+    deriving (Eq, Ord, Show)
 
 renderSourceAmiFilterKey :: SourceAmiFilterKey -> Text
 renderSourceAmiFilterKey = \case
@@ -223,7 +223,7 @@
     , blockDeviceMappingVirtualName :: Maybe Text -- prefixed with 'ephemeral' for
     -- | The virtual device name. See the documentation on Block Device Mapping for more information
     , blockDeviceMappingNoDevice :: Maybe Bool
-    } deriving (Eq, Show)
+    } deriving (Eq, Ord, Show)
 
 -- | Construct a basic 'BlockDeviceMapping'
 blockDeviceMapping :: Text -> Text -> Int -> Bool -> BlockDeviceMapping
@@ -312,7 +312,7 @@
     , ebsVpcId :: Maybe Text -- ^ vpc_id
     -- vpc_filter - https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html
     -- windows_password_timeout
-    } deriving (Eq, Show)
+    } deriving (Eq, Ord, Show)
 
 
 -- | Construct a basic @amazon-ebs@ builder.
diff --git a/src/Kerry/Engine.hs b/src/Kerry/Engine.hs
--- a/src/Kerry/Engine.hs
+++ b/src/Kerry/Engine.hs
@@ -41,12 +41,12 @@
 newtype Template =
   Template {
       renderTemplate :: Text
-    } deriving (Eq, Show)
+    } deriving (Eq, Ord, Show)
 
 newtype RawTemplate =
   RawTemplate {
       _rawTemplate :: Text
-    } deriving (Eq, Show)
+    } deriving (Eq, Ord, Show)
 
 toTemplate :: RawTemplate -> Template
 toTemplate (RawTemplate raw) =
diff --git a/src/Kerry/Packer.hs b/src/Kerry/Packer.hs
--- a/src/Kerry/Packer.hs
+++ b/src/Kerry/Packer.hs
@@ -55,7 +55,7 @@
 
 data UserVariable =
   UserVariable Text Text
-    deriving (Eq, Show)
+    deriving (Eq, Ord, Show)
 
 -- |
 -- Builders
@@ -69,12 +69,12 @@
       builderType :: BuilderType
     , builderName :: Maybe Text
     , builderCommunicator :: Communicator
-    } deriving (Eq, Show)
+    } deriving (Eq, Ord, Show)
 
 -- | Concrete 'BuilderType'
 data BuilderType =
     AmazonEBSBuilder (AmazonEC2.AWS AmazonEC2.EBS)
-    deriving (Eq, Show)
+    deriving (Eq, Ord, Show)
 
 -- |
 -- Provisioner
@@ -91,7 +91,7 @@
     , provisionerPauseBefore :: Maybe Text
     , provisionerTimeout :: Maybe Text
     , provisionerOverride :: Maybe (Map Text (Map Text Text))
-    } deriving (Eq, Show)
+    } deriving (Eq, Ord, Show)
 
 -- | Basic 'Provisioner'
 provisioner :: ProvisionerType -> Provisioner
@@ -109,11 +109,11 @@
 data ProvisionerType =
     ShellProvisioner Shell.Shell
   | FileProvisioner File.File
-    deriving (Eq, Show)
+    deriving (Eq, Ord, Show)
 
 data PostProcessor =
   PostProcessor
-  deriving (Eq, Show)
+  deriving (Eq, Ord, Show)
 
 -- |
 -- Packer
@@ -126,7 +126,7 @@
     , builders :: [Builder]
     , provisioners :: [Provisioner]
     , postProcessors :: [PostProcessor]
-    } deriving (Eq, Show)
+    } deriving (Eq, Ord, Show)
 
 -- |
 -- Communicator
@@ -142,7 +142,7 @@
   | SSH SSHCommunicator
   -- | A WinRM connection will be established.
   | WinRm
-    deriving (Eq, Show)
+    deriving (Eq, Ord, Show)
 
 
 -- |
@@ -176,7 +176,7 @@
 -- 'ssh_proxy_port' (number) - A port of the SOCKS proxy. Defaults to 1080.
 -- 'ssh_proxy_username' (string) - The username to authenticate with the proxy server. Optional.
 -- 'ssh_read_write_timeout' (string) - The amount of time to wait for a remote command to end. This might be useful if, for example, packer hangs on a connection after a reboot. Example: 5m. Disabled by default.
-    } deriving (Eq, Show)
+    } deriving (Eq, Ord, Show)
 
 -- |
 -- A minimal default @ssh@ communicator where only the @username@
diff --git a/src/Kerry/Provisioner/File.hs b/src/Kerry/Provisioner/File.hs
--- a/src/Kerry/Provisioner/File.hs
+++ b/src/Kerry/Provisioner/File.hs
@@ -28,13 +28,13 @@
     , fileDirection :: FileDirection
     -- | For advanced users only. If true, check the file existence only before uploading, rather than upon pre-build validation. This allows to upload files created on-the-fly. This defaults to false. We don't recommend using this feature, since it can cause Packer to become dependent on system state. We would prefer you generate your files before the Packer run, but realize that there are situations where this may be unavoidable.
     , fileGenerated :: Maybe Bool
-    } deriving (Eq, Show)
+    } deriving (Eq, Ord, Show)
 
 -- | 'FileDirection'
 data FileDirection =
     FileUpload
   | FileDownload
-    deriving (Eq, Show)
+    deriving (Eq, Ord, Show)
 
 renderFileDirection :: FileDirection -> Text
 renderFileDirection = \case
diff --git a/src/Kerry/Provisioner/Shell.hs b/src/Kerry/Provisioner/Shell.hs
--- a/src/Kerry/Provisioner/Shell.hs
+++ b/src/Kerry/Provisioner/Shell.hs
@@ -58,7 +58,7 @@
     , shellStartRetryTimeout :: Maybe Text
     -- | Wait the amount of time after provisioning a shell script, this pause be taken if all previous steps were successful.
     , shellPauseAfter :: Maybe Text
-    } deriving (Eq, Show)
+    } deriving (Eq, Ord, Show)
 
 -- | Basic 'Shell'
 shell :: ShellType -> Shell
@@ -86,7 +86,7 @@
     Inline [Text]
   | Script Text
   | Scripts [Text]
-    deriving (Eq, Show)
+    deriving (Eq, Ord, Show)
 
 
 -- | Shell serialization
