{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
module Miso.TypeLevel ( ToServerRoutes ) where
import Miso.Html
import Servant.API
import Servant.HTML.Lucid
type family ToServerRoutes (layout :: k) (wrapper :: * -> *) (action :: *) :: k where
ToServerRoutes (a :<|> b) wrapper action =
ToServerRoutes a wrapper action :<|>
ToServerRoutes b wrapper action
ToServerRoutes (a :> b) wrapper action =
a :> ToServerRoutes b wrapper action
ToServerRoutes (View a) wrapper action =
Get '[HTML] (wrapper (View action))