parenlog.ss
#lang scheme
(require (for-syntax syntax/parse)
         "core.ss")

(define-syntax (:- stx)
  (raise-syntax-error ':- "Cannot be used outside define-model" stx))

(define-syntax (paren-stmt->rule stx)
  (syntax-parse
   stx
   #:literals (:-)
   [(_ (:- head body-query ...))
    (syntax/loc stx
      (compile-rule head
                    body-query ...))]
   [(_ head)
    (syntax/loc stx
      (paren-stmt->rule (:- head)))]))

(define-syntax (define-model stx)
  (syntax-parse
   stx
   [(_ model:id paren-stmt ...)
    (syntax/loc stx
      (define model
        (make-model
         (list (paren-stmt->rule paren-stmt)
               ...))))]))

(define-syntax (query-model stx)
  (syntax-parse 
   stx
   [(_ model:expr options ... query)
    (syntax/loc stx
      (query-model* model options ...
                    (compile-query query)))]))

(provide define-model
         query-model
         :-
         model?)