> import "Python" > a = variant ([1.0, 2.0, 3.0]) > a [1.0, 2.0, 3.0] : Double[] > variantDatatype a Double[] > matchDatatype DoubleType = "Double" > matchDatatype (ArrayType t) = matchDatatype t + "[]" > matchDatatype (variantDatatype a) "Double[]" > getVariantAsNumber var = match variantDatatype var with > BooleanType -> if variantValue var then 1.0 else 0.0 > ByteType -> coerce (coerce (variantValue var :: Byte) :: Integer) > IntegerType -> coerce (variantValue var :: Integer) > LongType -> coerce (variantValue var :: Long) > FloatType -> coerce (variantValue var :: Float) > DoubleType -> variantValue var :: Double > StringType -> coerce (variantValue var :: String) > OptionalType t -> getVariantAsNumber (variantComponent var componentReference) > otherwise -> fail "Variant \(var) is not a number" > getVariantAsNumber (variant True) 1.0 > getVariantAsNumber (variant (2 :: Byte)) 2.0 > getVariantAsNumber (variant (456 :: Integer)) 456.0 > getVariantAsNumber (variant (Just 2.5 :: Maybe Double)) 2.5 > getVariantAsNumber (variant "23.7") 23.7 > b = runPython do > setPythonVariantVariable "foo" a > executePythonStatement "foo.append(4.0)" > getPythonVariantVariable "foo" > b [1.0 : Double, 2.0 : Double, 3.0 : Double, 4.0 : Double] : Variant[] > variantValue b :: [Double] [1.0, 2.0, 3.0, 4.0] > import "MMap" as MMap > runPython do > foo = MMap.create () :: MMap.T String Dynamic > MMap.put foo "c1" (toDynamic (vector [True, True, False, True])) > MMap.put foo "c2" (toDynamic ["foo", "bar", "baz"]) > MMap.put foo "c3" (toDynamic 25.0) > setPythonVariantVariable "foo" (variant foo) > executePythonStatement "c1 = foo['c1']" > executePythonStatement "c2 = foo['c2']" > executePythonStatement "c3 = foo['c3']" > (getPythonBooleanArrayVariable "c1", getPythonStringArrayVariable "c2", getPythonDoubleVariable "c3") (vector [True, True, False, True], vector ["foo", "bar", "baz"], 25.0)