{-# LANGUAGE OverloadedStrings #-} module Funcons.Operations.Optionals where import Funcons.Operations.Internal library :: (HasValues t, Eq t) => Library t library :: Library t library = [(OP, ValueOp t)] -> Library t forall t. [(OP, ValueOp t)] -> Library t libFromList [ (OP "optionals", UnaryExpr t -> ValueOp t forall t. UnaryExpr t -> ValueOp t UnaryExpr UnaryExpr t forall t. HasValues t => OpExpr t -> OpExpr t optionals) , (OP "none", NullaryExpr t -> ValueOp t forall t. NullaryExpr t -> ValueOp t NullaryExpr NullaryExpr t forall t. HasValues t => OpExpr t none) , (OP "some", UnaryExpr t -> ValueOp t forall t. UnaryExpr t -> ValueOp t UnaryExpr UnaryExpr t forall t. HasValues t => OpExpr t -> OpExpr t some) ] toOpt :: HasValues t => Maybe t -> Values t toOpt :: Maybe t -> Values t toOpt (Just t t) = Name -> [t] -> Values t forall t. Name -> [t] -> Values t ADTVal Name "some" [t t] toOpt Maybe t Nothing = Values t forall t. Values t none__ none__ :: Values t none__ = Name -> [t] -> Values t forall t. Name -> [t] -> Values t ADTVal Name "none" [] optionals_ :: HasValues t => [OpExpr t] -> OpExpr t optionals_ :: [OpExpr t] -> OpExpr t optionals_ = UnaryExpr t -> [OpExpr t] -> OpExpr t forall t. UnaryExpr t -> [OpExpr t] -> OpExpr t unaryOp UnaryExpr t forall t. HasValues t => OpExpr t -> OpExpr t optionals optionals :: HasValues t => OpExpr t -> OpExpr t optionals :: OpExpr t -> OpExpr t optionals = OP -> UnaryVOp t -> OpExpr t -> OpExpr t forall t. HasValues t => OP -> UnaryVOp t -> OpExpr t -> OpExpr t vUnaryOp OP "optionals" UnaryVOp t forall t. HasValues t => Values t -> Result t op where op :: Values t -> Result t op (ComputationType ComputationTypes t t) = (t -> Result t forall t. t -> Result t Normal (t -> Result t) -> t -> Result t forall a b. (a -> b) -> a -> b $ Types t -> t forall t. HasTypes t => Types t -> t injectT (Types t -> t) -> Types t -> t forall a b. (a -> b) -> a -> b $ Name -> [t] -> Types t forall t. Name -> [t] -> Types t ADT Name "optionals" [ComputationTypes t -> t forall t. HasComputationTypes t => ComputationTypes t -> t injectCT ComputationTypes t t]) op Values t _ = OP -> Result t forall t. OP -> Result t SortErr OP "optionals not applied to a type" some__ :: HasValues t => t -> Values t some__ :: t -> Values t some__ = Maybe t -> Values t forall t. HasValues t => Maybe t -> Values t toOpt (Maybe t -> Values t) -> (t -> Maybe t) -> t -> Values t forall b c a. (b -> c) -> (a -> b) -> a -> c . t -> Maybe t forall a. a -> Maybe a Just some_ :: HasValues t => [OpExpr t] -> OpExpr t some_ :: [OpExpr t] -> OpExpr t some_ = UnaryExpr t -> [OpExpr t] -> OpExpr t forall t. UnaryExpr t -> [OpExpr t] -> OpExpr t unaryOp UnaryExpr t forall t. HasValues t => OpExpr t -> OpExpr t some some :: HasValues t => OpExpr t -> OpExpr t some :: OpExpr t -> OpExpr t some = OP -> UnaryVOp t -> OpExpr t -> OpExpr t forall t. HasValues t => OP -> UnaryVOp t -> OpExpr t -> OpExpr t vUnaryOp OP "some" (t -> Result t forall t. t -> Result t Normal (t -> Result t) -> (Values t -> t) -> UnaryVOp t forall b c a. (b -> c) -> (a -> b) -> a -> c . Values t -> t forall t. HasValues t => Values t -> t inject (Values t -> t) -> (Values t -> Values t) -> Values t -> t forall b c a. (b -> c) -> (a -> b) -> a -> c . t -> Values t forall t. HasValues t => t -> Values t some__ (t -> Values t) -> (Values t -> t) -> Values t -> Values t forall b c a. (b -> c) -> (a -> b) -> a -> c . Values t -> t forall t. HasValues t => Values t -> t inject) none_ :: HasValues t => [OpExpr t] -> OpExpr t none_ :: [OpExpr t] -> OpExpr t none_ = OpExpr t -> [OpExpr t] -> OpExpr t forall t. NullaryExpr t -> [NullaryExpr t] -> NullaryExpr t nullaryOp OpExpr t forall t. HasValues t => OpExpr t none none :: HasValues t => OpExpr t none :: OpExpr t none = OP -> NullaryVOp t -> OpExpr t forall t. OP -> NullaryVOp t -> OpExpr t vNullaryOp OP "none" (t -> NullaryVOp t forall t. t -> Result t Normal (t -> NullaryVOp t) -> t -> NullaryVOp t forall a b. (a -> b) -> a -> b $ Values t -> t forall t. HasValues t => Values t -> t inject (Values t -> t) -> Values t -> t forall a b. (a -> b) -> a -> b $ Values t forall t. Values t none__)