packages feed

lean-0.0.0.1: Lean/Raw/C/Expr.hsc

module Lean.Raw.C.Expr where

import Foreign
import Foreign.C.Types

import Lean.Raw.C.Exception (Exception)
import Lean.Raw.C.Univ (Univ)
import Lean.Wrapper

#include <lean.h>

data Struct

instance Drop Struct where drop = drop'
foreign import ccall unsafe "&lean_expr_del" drop' :: FunPtr (Ptr Struct -> IO ())

type Expr = Ptr Struct

newtype Kind = Kind CInt
  deriving (Eq)

#{enum Kind, Kind,
  Var    = LEAN_EXPR_VAR,
  Sort   = LEAN_EXPR_SORT,
  Const  = LEAN_EXPR_CONST,
  Local  = LEAN_EXPR_LOCAL,
  Meta   = LEAN_EXPR_META,
  App    = LEAN_EXPR_APP,
  Lambda = LEAN_EXPR_LAMBDA,
  Pi     = LEAN_EXPR_PI,
  Let    = LEAN_EXPR_LET,
  Macro  = LEAN_EXPR_MACRO}

foreign import ccall unsafe "lean_expr_mk_var" mkVar :: CUInt -> Ptr Expr -> Ptr Exception -> IO CInt
foreign import ccall unsafe "lean_expr_mk_sort" mkSort :: Univ -> Ptr Expr -> Ptr Exception -> IO CInt

foreign import ccall unsafe "lean_expr_get_var_idx" getVarIdx :: Expr -> Ptr CUInt -> Ptr Exception -> IO CInt
foreign import ccall unsafe "lean_expr_get_sort_univ" getSortUniv :: Expr -> Ptr Univ -> Ptr Exception -> IO CInt

foreign import ccall unsafe "lean_expr_kind" kind :: Expr -> Kind