diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,11 @@
 # Revision history for config-schema
 
+## 0.5.0.0
+
+* Add Spec instances for Int and Word types. All instances
+  including the previous Int instance now validate ranges.
+* Changed argument order for `loadValueFromFile`
+
 ## 0.4.1.0
 
 * Add `loadValueFromFile` and `SchemaError`. This is intended
diff --git a/config-schema.cabal b/config-schema.cabal
--- a/config-schema.cabal
+++ b/config-schema.cabal
@@ -1,5 +1,5 @@
 name:                config-schema
-version:             0.4.1.0
+version:             0.5.0.0
 synopsis:            Schema definitions for the config-value package
 description:         This package makes it possible to defined schemas for use when
                      loading configuration files using the config-value format.
diff --git a/src/Config/Schema/Load.hs b/src/Config/Schema/Load.hs
--- a/src/Config/Schema/Load.hs
+++ b/src/Config/Schema/Load.hs
@@ -55,10 +55,10 @@
 --
 -- Throws 'IOError', 'ParseError', or 'SchemaError'
 loadValueFromFile ::
-  FilePath     {- ^ filename      -} ->
   ValueSpecs a {- ^ specification -} ->
+  FilePath     {- ^ filename      -} ->
   IO a
-loadValueFromFile path spec =
+loadValueFromFile spec path =
   do txt <- Text.readFile path
      val <- either throwIO return (parse txt)
      either (throwIO . SchemaError) return (loadValue spec val)
diff --git a/src/Config/Schema/Spec.hs b/src/Config/Schema/Spec.hs
--- a/src/Config/Schema/Spec.hs
+++ b/src/Config/Schema/Spec.hs
@@ -64,14 +64,17 @@
 
 import           Control.Applicative              (Const(..))
 import           Control.Applicative.Free         (Ap, runAp, runAp_, liftAp)
+import           Data.Bits                        (Bits, toIntegralSized)
 import           Data.Functor.Coyoneda            (Coyoneda(..), liftCoyoneda, lowerCoyoneda, hoistCoyoneda)
 import           Data.Functor.Alt                 (Alt(..))
+import           Data.Int
 import           Data.List.NonEmpty               (NonEmpty)
 import qualified Data.List.NonEmpty as NonEmpty
 import           Data.Semigroup                   (Semigroup)
 import           Data.Semigroup.Foldable          (asum1, foldMap1)
 import           Data.Text                        (Text)
 import qualified Data.Text as Text
+import           Data.Word
 
 ------------------------------------------------------------------------
 -- Specifications for sections
@@ -264,11 +267,23 @@
 instance Spec Text    where valuesSpec = liftValueSpec TextSpec
 instance Spec Integer where valuesSpec = liftValueSpec IntegerSpec
 instance Spec Rational where valuesSpec = liftValueSpec RationalSpec
-instance Spec Int     where valuesSpec = fromInteger <$> valuesSpec
 instance Spec a => Spec [a] where valuesSpec = liftValueSpec (ListSpec valuesSpec)
 instance (Spec a, Spec b) => Spec (Either a b) where
   valuesSpec = Left <$> valuesSpec <!> Right <$> valuesSpec
 
+instance Spec Int    where valuesSpec = sizedBitsSpec "machine-bit signed"
+instance Spec Int8   where valuesSpec = sizedBitsSpec "8-bit signed"
+instance Spec Int16  where valuesSpec = sizedBitsSpec "16-bit signed"
+instance Spec Int32  where valuesSpec = sizedBitsSpec "32-bit signed"
+instance Spec Int64  where valuesSpec = sizedBitsSpec "64-bit signed"
+instance Spec Word   where valuesSpec = sizedBitsSpec "machine-bit unsigned"
+instance Spec Word8  where valuesSpec = sizedBitsSpec "8-bit unsigned"
+instance Spec Word16 where valuesSpec = sizedBitsSpec "16-bit unsigned"
+instance Spec Word32 where valuesSpec = sizedBitsSpec "32-bit unsigned"
+instance Spec Word64 where valuesSpec = sizedBitsSpec "64-bit unsigned"
+
+sizedBitsSpec :: (Integral a, Bits a) => Text -> ValueSpecs a
+sizedBitsSpec name = customSpec name (liftValueSpec IntegerSpec) toIntegralSized
 
 -- | Specification for matching a particular atom.
 atomSpec :: Text -> ValueSpecs ()
