diff --git a/src/Component/Editor/Node.purs b/src/Component/Editor/Node.purs index 6109c8f..e48e819 100644 --- a/src/Component/Editor/Node.purs +++ b/src/Component/Editor/Node.purs @@ -168,7 +168,7 @@ renderNode { nodeData: nodeData } _ -> mempty - maxRadius = nodeRadius + (toNumber $ List.length inputArcs - 1) * inputLayerOffset + maxRadius = nodeRadius + (toNumber $ List.length inputArcs - 1) * inputLayerOffset + arcWidth * 2.0 valueSvg = maybe mempty diff --git a/src/Component/Editor/Node/Overlays.purs b/src/Component/Editor/Node/Overlays.purs index bd2378a..39ec336 100644 --- a/src/Component/Editor/Node/Overlays.purs +++ b/src/Component/Editor/Node/Overlays.purs @@ -6,7 +6,6 @@ import Prelude import Data.Array (mapWithIndex) import Data.Int (toNumber) import Halogen.HTML (HTML) -import Lunarbox.Data.Editor.Constants (nodeRadius) import Svg.Attributes as SA import Svg.Elements as SE @@ -20,7 +19,7 @@ overlays radius = <<< mapWithIndex \index elem -> SE.g [ SA.transform - [ SA.Translate 0.0 $ -nodeRadius + (toNumber $ (index + 1) * -20) + [ SA.Translate 0.0 $ -radius + (toNumber $ (index + 1) * -20) ] ] [ elem ] diff --git a/src/Control/Monad/Dataflow/Interpreter/Interpret.purs b/src/Control/Monad/Dataflow/Interpreter/Interpret.purs index 609d3d9..905999d 100644 --- a/src/Control/Monad/Dataflow/Interpreter/Interpret.purs +++ b/src/Control/Monad/Dataflow/Interpreter/Interpret.purs @@ -17,7 +17,6 @@ import Lunarbox.Data.Dataflow.Expression (Expression(..), Literal(..), NativeExp import Lunarbox.Data.Dataflow.Runtime (RuntimeValue(..)) import Lunarbox.Data.Dataflow.Runtime.TermEnvironment as TermEnvironment import Lunarbox.Data.Dataflow.Runtime.ValueMap (ValueMap(..)) -import Lunarbox.Data.Lens (newtypeIso) -- Gets a value from the current environment getVariable :: forall l. Ord l => String -> Interpreter l RuntimeValue @@ -27,7 +26,7 @@ getVariable name = do -- Perform an action in an environment with an extra variable withTerm :: forall l. Ord l => String -> RuntimeValue -> Interpreter l ~> Interpreter l -withTerm name value = local $ over (_termEnv <<< newtypeIso) $ Map.insert (show name) value +withTerm name value = local $ over _termEnv $ TermEnvironment.insert name value -- Interpret an expression into a runtimeValue interpret :: forall l. Ord l => Expression l -> Interpreter l RuntimeValue @@ -53,14 +52,15 @@ interpret expression = do Nothing -> pure Null Let _ _ name value body -> do runtimeValue <- interpret value - local (over (_termEnv <<< newtypeIso) $ Map.insert (show name) runtimeValue) $ interpret body + withTerm (show name) runtimeValue $ interpret body FixPoint _ function -> interpret $ FunctionCall location function $ FixPoint location function - Native _ (NativeExpression _ call) -> pure call - FunctionCall _ argument function -> do + Native _ (NativeExpression _ inner) -> pure inner + FunctionCall _ function argument -> do runtimeArgument <- interpret argument - runtimeFunction <- interpret function - case runtimeFunction of - Function call -> pure $ call runtimeArgument - _ -> pure Null + runtimeFunction <- + interpret function + pure case runtimeFunction of + Function call -> call runtimeArgument + _ -> Null tell $ ValueMap $ Map.singleton location value pure value diff --git a/src/Data/Dataflow/Expression.purs b/src/Data/Dataflow/Expression.purs index e920601..699a87e 100644 --- a/src/Data/Dataflow/Expression.purs +++ b/src/Data/Dataflow/Expression.purs @@ -39,7 +39,8 @@ derive instance eqVarName :: Eq VarName derive instance ordVarName :: Ord VarName -derive newtype instance showVarName :: Show VarName +instance showVarName :: Show VarName where + show = unwrap derive instance newtypeVarName :: Newtype VarName _ diff --git a/src/Data/Dataflow/Native/ControlFlow.purs b/src/Data/Dataflow/Native/ControlFlow.purs index daa35a6..36cc8b3 100644 --- a/src/Data/Dataflow/Native/ControlFlow.purs +++ b/src/Data/Dataflow/Native/ControlFlow.purs @@ -21,7 +21,9 @@ typeIf = Forall [ return ] $ TArrow typeBool $ TArrow typeReturn $ TArrow typeRe evalIf :: RuntimeValue -> RuntimeValue evalIf (Bool true) = binaryFunction const -evalIf _ = binaryFunction $ flip const +evalIf (Bool false) = binaryFunction $ flip const + +evalIf _ = Null if' :: NativeConfig if' = diff --git a/src/Data/Dataflow/Runtime/TermEnvironment.purs b/src/Data/Dataflow/Runtime/TermEnvironment.purs index a2bdc2a..e86d1e0 100644 --- a/src/Data/Dataflow/Runtime/TermEnvironment.purs +++ b/src/Data/Dataflow/Runtime/TermEnvironment.purs @@ -1,6 +1,7 @@ module Lunarbox.Data.Dataflow.Runtime.TermEnvironment ( TermEnvironment(..) , lookup + , insert ) where import Prelude @@ -24,3 +25,7 @@ derive newtype instance monoidTermEnvironment :: Monoid TermEnvironment -- Same as Map.lookup but returns Null in case the value cannot be found lookup :: String -> TermEnvironment -> RuntimeValue lookup key = fromMaybe Null <<< Map.lookup key <<< unwrap + +-- Wrapper around Map.insert +insert :: String -> RuntimeValue -> TermEnvironment -> TermEnvironment +insert key value (TermEnvironment env) = TermEnvironment $ Map.insert key value env