module Okapi.Mode.Forest ( Shape, Forest (..), ) where import Data.Kind (Type) import Okapi.Record.Tree qualified as Tree import Okapi.Record.Data qualified as Data import Okapi.HTTP.Responses (Cases, Responses) data Shape (method :: Type) (path :: Type) (query :: Type) (headers :: Type) (body :: Type) (result :: Type) data Forest shape where (:->) :: Tree.Request method path query headers body -> Tree.Response status resHeaders resBody -> Forest (Shape method path query headers body (Data.Response status resHeaders resBody)) (:-<) :: Cases responses => Tree.Request method path query headers body -> Responses Tree.Response responses -> Forest (Shape method path query headers body (responses Data.Response))