ema-0.8.0.0: src/Ema/Route/Lib/File.hs
module Ema.Route.Lib.File (
FileRoute (..),
) where
import Ema.Route.Class (IsRoute (..))
import Ema.Route.Prism (
toPrism_,
)
import GHC.TypeLits (KnownSymbol, Symbol, symbolVal)
import Optics.Core (coercedTo, only, (%))
{- | A type-level singleton route, whose encoding is given by the symbol parameter.
FileRoute "foo.html" encodes to "foo.html".
TODO: Can this type be simplified? See https://stackoverflow.com/q/72755053/55246
-}
newtype FileRoute (filename :: Symbol) = FileRoute ()
deriving stock (Eq, Ord, Show, Generic)
instance KnownSymbol fn => IsRoute (FileRoute fn) where
type RouteModel (FileRoute fn) = ()
routePrism () =
toPrism_ $
only (symbolVal (Proxy @fn))
% coercedTo
routeUniverse () =
[FileRoute ()]