well this does reuse the `functionName`, but performance is more important here. how about  ```  private lazy val arrayGetter: MapData => ArrayData = if (source) ...    def eval...    arrayGetter( input.asInstanceOf[MapData])  ```