{-# LANGUAGE OverloadedLists #-}

-- |

-- Module      : JsonLogic.Operation.Misc

-- Description : Internal JsonLogic misc operations

-- Copyright   : (c) Marien Matser, Gerard van Schie, Jelle Teeuwissen, 2022

-- License     : MIT

-- Maintainer  : jelleteeuwissen@hotmail.nl

-- Stability   : experimental

module JsonLogic.Operation.Misc (miscOperations, trace) where

import Debug.Trace (traceShow)
import JsonLogic.Json
import JsonLogic.Type
import Prelude hiding (log)

miscOperations :: Monad m => Operations m
miscOperations :: Operations m
miscOperations = [Item (Operations m)
forall (m :: * -> *). Monad m => Operation m
trace]

trace :: Monad m => Operation m
trace :: Operation m
trace = ([Char]
"trace", Function m Json
forall (m :: * -> *). Monad m => Function m Json
evaluateTrace)

evaluateTrace :: Monad m => Function m Json
evaluateTrace :: Function m Json
evaluateTrace SubEvaluator m
evaluator Json
args Json
vars = do
  Json
res <- SubEvaluator m
evaluator Json
args Json
vars
  let val :: Json
val = case Json
res of
        JsonArray (Json
item : [Json]
_) -> Json
item
        Json
oth -> Json
oth
  Json -> (Json -> Result m Json) -> Json -> Result m Json
forall a b. Show a => a -> b -> b
traceShow Json
val Json -> Result m Json
forall (m :: * -> *) a. Monad m => a -> m a
return Json
val