type # ports
PortKind = enum
Bool, Int, Float, String
PortType = concept c
(c is bool or
c is int or
c is float or
c is string)
NumericPort = concept c
c is PortType
c is int or c is float
type # parameters
Parameter[T: PortType] = object
name: string
value: T
when T is NumericPort:
minVal, maxVal: T
var p = Parameter[float]("freq", 440.0, 0.0, 20000.0)