X4IQZMO364GSCFRZ2TCWVQEP7NB4MSFB6HUZVXFMYZFJZSAZEIKQC
JDF4JUMSZJ6JD4Y27R2G5JC6LFT6SNCP52UDVCGKQ4QAGMGUDMJAC
6XMVEBZAMRKHRYLFMJ6ZNSBM5ZXPTPK4YS4QUNGGPPUS4HLPO6GAC
import qualified Deque.Strict as Deq
type Deque a = Deq.Deque a
-- values at the front are applied first, further applications get appended to backdata Neutral = Neutral NeutralRoot (Deque Value)
-- values at the front are applied first, further applications get appended to back
data Neutral = Neutral NeutralRoot (Deque Value)
-- inner (later) values are applied first, further applications get appended to frontdata Neutral = Neutral NeutralRoot [Value]
-- inner (later) values are applied first, further applications get appended to front
data Neutral = Neutral NeutralRoot [Value]
vapp (VNeutral (Neutral nam xs)) = \v -> Right . VNeutral . Neutral nam $ Deq.snoc v xs
vapp (VNeutral (Neutral nam xs)) = \v -> Right . VNeutral . Neutral nam $ v:xs
boundfree >>= \bf -> foldM (\a b -> EApply a <$> quote i b) (ENeutralRoot bf) xs
boundfree >>= \bf -> foldM (\a b -> EApply a <$> quote i b) (ENeutralRoot bf) (reverse xs)
, deque ^>= 0.4.0.0