packages feed

ruler-core-1.0: examples/TypedEval.rul

{
{-# LANGUAGE BangPatterns #-}
module Eval where

import Control.Monad.Error
}

data Expr
  var a
  con Int
    constr a ~ Int
    x :: Int

itf Eval
  var a
  visit eval
    inh e :: Expr a
    syn val :: a

{
eval = sem eval : Eval
         inst m :: IO
         visit eval
           clause int
             match Expr.Int@loc = lhs.e
             lhs.val = loc.x
}