module Language.Halide.Prelude
  ( (==)
  , (/=)
  , (+)
  , (-)
  )
where

import Data.Kind (Type)
import Language.Halide.Expr
import Language.Halide.Type
import Prelude (Bool, undefined)

type family  a b :: Type

infix 4 ==, /=

(==) :: Expr a -> Expr b -> Expr Bool
== :: forall {k} {k} (a :: k) (b :: k). Expr a -> Expr b -> Expr Bool
(==) = forall a. HasCallStack => a
undefined

(/=) :: Expr a -> Expr b -> Expr Bool
/= :: forall {k} {k} (a :: k) (b :: k). Expr a -> Expr b -> Expr Bool
(/=) = forall a. HasCallStack => a
undefined

infix 6 +, -

(+) :: Expr a -> Expr b -> Expr (Promoted a b)
+ :: forall a b. Expr a -> Expr b -> Expr (Promoted a b)
(+) = forall a. HasCallStack => a
undefined

(-) :: Expr a -> Expr b -> Expr (Promoted a b)
(-) = forall a. HasCallStack => a
undefined

infix 7 *, /

(*) :: Expr a -> Expr b -> Expr (Promoted a b)
* :: forall a b. Expr a -> Expr b -> Expr (Promoted a b)
(*) = forall a. HasCallStack => a
undefined

(/) :: Expr a -> Expr b -> Expr (Promoted a b)
/ :: forall a b. Expr a -> Expr b -> Expr (Promoted a b)
(/) = forall a. HasCallStack => a
undefined

mkExpr :: IsHalideType a => a -> Expr a
mkExpr :: forall a. IsHalideType a => a -> Expr a
mkExpr = forall a. HasCallStack => a
undefined