aboutsummaryrefslogblamecommitdiffstats
path: root/lib/sublanguage.ml
blob: cf3d50187a4db933fc29ce73a8ffc414feb9f74b (plain) (tree)
1
2
3
4
5
6
7
8
9
                         




                                                                      


                                                                               

                        

                                                                        



                                                                      
 
                   

                                    


              
 

                                                          

               
                                                                                  
 

                                             
include Sublanguage_types
(** Effect classification for sublanguage operations.

    Categorically:
    - Query: a natural transformation between instance functors (DRL).
      Side-effect-free; the database state is unchanged.
    - Transition: a morphism in the category of database states (DDL, DML, ICL,
      DCL, and future TCL). Produces a new state via substitution (Harper, PFPL
      ch. 3-4).

    Future sublanguages:
    - TCL -> Transition (transaction boundaries are state morphisms with
      atomicity constraints)
    - PPL -> new effect class: potentially non-terminating computation
      (Turing-complete; breaks the termination guarantee of DRL)
    - ACL -> a functor restriction: narrows the admissible natural
      transformations based on authorization context *)

module type S = sig
  include Configuration.CONFIGURABLE

  type storage
  type ast
  type error

  val name : string
  val parse_sexp : Sexplib.Sexp.t -> (ast, error) Result.t

  val execute :
    storage -> Management.Multigroup.multigroup -> ast -> (result, error) Result.t

  val sexp_of_error : error -> Sexplib.Sexp.t
end