package vato007:ingey; interface types { resource csv-row { columns: func() -> list; values: func() -> list; entries: func() -> list>; value: func(name: string) -> option; } resource csv-reader { columns: func() -> list; next: func() -> csv-row; has-next: func() -> bool; // Get a row by values in one or more columns query: func(values: list>) -> csv-row; read-into-string: func() -> string; read-into-map: func() -> read-map; } resource write-map { keys: func() -> list; put: func(name: string, value: string); } resource csv-readers { get-reader: func(name: string) -> option; } resource csv-writer { write-map: func(row: write-map); write-row: func(row: list>); } resource read-map { get: func(key: string) -> string; } } // This will apply to csv files only for simplicity. A separate node should be created for arbitrary readers/writers world dynamic { use types.{csv-readers, read-map, csv-writer}; export evaluate: func(properties: read-map, readers: csv-readers, writer: csv-writer); }