diff --git a/mu-rpc.cabal b/mu-rpc.cabal
--- a/mu-rpc.cabal
+++ b/mu-rpc.cabal
@@ -1,5 +1,5 @@
 name:               mu-rpc
-version:            0.5.0.1
+version:            0.5.0.2
 synopsis:           Protocol-independent declaration of services and servers.
 description:
   Protocol-independent declaration of services and servers for mu-haskell.
@@ -22,20 +22,21 @@
 
 library
   exposed-modules:
+    Mu.Named
     Mu.Rpc
     Mu.Rpc.Annotations
     Mu.Rpc.Examples
     Mu.Server
 
   build-depends:
-      aeson
+      aeson             >=1.4   && <2
     , base              >=4.12  && <5
     , conduit           >=1.3.2 && <1.4
     , http-types        >=0.12  && <0.13
     , mtl               >=2.2   && <2.3
     , mu-schema         >=0.3   && <0.4
     , sop-core          >=0.5   && <0.6
-    , template-haskell  >=2.14  && <2.17
+    , template-haskell  >=2.14  && <2.18
     , text              >=1.2   && <1.3
     , wai               >=3.2   && <4
 
diff --git a/src/Mu/Named.hs b/src/Mu/Named.hs
new file mode 100644
--- /dev/null
+++ b/src/Mu/Named.hs
@@ -0,0 +1,57 @@
+{-# language DataKinds              #-}
+{-# language FlexibleInstances      #-}
+{-# language FunctionalDependencies #-}
+{-# language GADTs                  #-}
+{-# language PolyKinds              #-}
+{-# language RankNTypes             #-}
+{-# language TypeOperators          #-}
+module Mu.Named where
+
+import           GHC.TypeLits
+
+-- | A value tagged with a type-level name.
+data Named n h where
+  Named :: forall n h. h -> Named n h
+
+infixr 4 :|:
+-- | Heterogeneous list in which each element
+--   is tagged with a type-level name.
+data NamedList (hs :: [(Symbol, *)]) where
+  N0    :: NamedList '[]
+  (:|:) :: Named n h -> NamedList hs
+        -> NamedList ('(n, h) ': hs)
+
+-- | Used to turn tuples into 'NamedList's.
+class ToNamedList p nl | p -> nl where
+  toNamedList :: p -> NamedList nl
+
+instance ToNamedList (NamedList nl) nl where
+  toNamedList = id
+instance ToNamedList () '[] where
+  toNamedList _ = N0
+instance ToNamedList (Named n h) '[ '(n, h) ] where
+  toNamedList n = n :|: N0
+instance ToNamedList (Named n1 h1, Named n2 h2)
+                     '[ '(n1, h1), '(n2, h2) ] where
+  toNamedList (n1, n2) = n1 :|: n2 :|: N0
+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3)
+                     '[ '(n1, h1), '(n2, h2), '(n3, h3) ] where
+  toNamedList (n1, n2, n3) = n1 :|: n2 :|: n3 :|: N0
+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4)
+                     '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4) ] where
+  toNamedList (n1, n2, n3, n4) = n1 :|: n2 :|: n3 :|: n4 :|: N0
+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5)
+                     '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5) ] where
+  toNamedList (n1, n2, n3, n4, n5) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: N0
+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6)
+                     '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6) ] where
+  toNamedList (n1, n2, n3, n4, n5, n6) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: N0
+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6, Named n7 h7)
+                     '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7) ] where
+  toNamedList (n1, n2, n3, n4, n5, n6, n7) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: n7 :|: N0
+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6, Named n7 h7, Named n8 h8)
+                     '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7), '(n8, h8) ] where
+  toNamedList (n1, n2, n3, n4, n5, n6, n7, n8) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: n7 :|: n8 :|: N0
+instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6, Named n7 h7, Named n8 h8, Named n9 h9)
+                     '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7), '(n8, h8), '(n9, h9) ] where
+  toNamedList (n1, n2, n3, n4, n5, n6, n7, n8, n9) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: n7 :|: n8 :|: n9 :|: N0
diff --git a/src/Mu/Server.hs b/src/Mu/Server.hs
--- a/src/Mu/Server.hs
+++ b/src/Mu/Server.hs
@@ -79,6 +79,7 @@
 import           Data.Typeable
 import           GHC.TypeLits
 
+import           Mu.Named
 import           Mu.Rpc
 import           Mu.Schema
 
@@ -130,7 +131,7 @@
   | Unauthenticated
   | Internal
   | Invalid
-  | NotFound
+  | NotFound
   deriving (Eq, Show)
 
 -- | Defines a mapping between outcome of
@@ -361,53 +362,6 @@
   :: (ToNamedList p nl, ToServices chn info ss m hs nl)
   => p -> ServerT chn info ('Package pname ss) m hs
 resolver nl = Services $ toServices $ toNamedList nl
-
--- | A value tagged with a type-level name.
-data Named n h where
-  Named :: forall n h. h -> Named n h
-
-infixr 4 :|:
--- | Heterogeneous list in which each element
---   is tagged with a type-level name.
-data NamedList (hs :: [(Symbol, *)]) where
-  N0    :: NamedList '[]
-  (:|:) :: Named n h -> NamedList hs
-        -> NamedList ('(n, h) ': hs)
-
--- | Used to turn tuples into 'NamedList's.
-class ToNamedList p nl | p -> nl where
-  toNamedList :: p -> NamedList nl
-
-instance ToNamedList (NamedList nl) nl where
-  toNamedList = id
-instance ToNamedList () '[] where
-  toNamedList _ = N0
-instance ToNamedList (Named n h) '[ '(n, h) ] where
-  toNamedList n = n :|: N0
-instance ToNamedList (Named n1 h1, Named n2 h2)
-                     '[ '(n1, h1), '(n2, h2) ] where
-  toNamedList (n1, n2) = n1 :|: n2 :|: N0
-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3)
-                     '[ '(n1, h1), '(n2, h2), '(n3, h3) ] where
-  toNamedList (n1, n2, n3) = n1 :|: n2 :|: n3 :|: N0
-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4)
-                     '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4) ] where
-  toNamedList (n1, n2, n3, n4) = n1 :|: n2 :|: n3 :|: n4 :|: N0
-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5)
-                     '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5) ] where
-  toNamedList (n1, n2, n3, n4, n5) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: N0
-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6)
-                     '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6) ] where
-  toNamedList (n1, n2, n3, n4, n5, n6) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: N0
-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6, Named n7 h7)
-                     '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7) ] where
-  toNamedList (n1, n2, n3, n4, n5, n6, n7) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: n7 :|: N0
-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6, Named n7 h7, Named n8 h8)
-                     '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7), '(n8, h8) ] where
-  toNamedList (n1, n2, n3, n4, n5, n6, n7, n8) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: n7 :|: n8 :|: N0
-instance ToNamedList (Named n1 h1, Named n2 h2, Named n3 h3, Named n4 h4, Named n5 h5, Named n6 h6, Named n7 h7, Named n8 h8, Named n9 h9)
-                     '[ '(n1, h1), '(n2, h2), '(n3, h3), '(n4, h4), '(n5, h5), '(n6, h6), '(n7, h7), '(n8, h8), '(n9, h9) ] where
-  toNamedList (n1, n2, n3, n4, n5, n6, n7, n8, n9) = n1 :|: n2 :|: n3 :|: n4 :|: n5 :|: n6 :|: n7 :|: n8 :|: n9 :|: N0
 
 class ToHandlers chn info inh ms m hs nl | chn inh ms m nl -> hs where
   toHandlers :: NamedList nl
