A table library for Idris 2.
Run:
make installBuild your code with the table package, and import the Data.Table module.
Examples here and in the tests are taken from B2T2 benchmark examples.
Tables are of type Table schema, where a Schema is a description of the columns of the table.
import Data.Table
gradebook : Table [<"name" :! String, "age" :! Nat, "midterm" :! Nat, "final" :! Nat]
gradebook = [<
[<"Bob", 12, 77, 87],
[<"Alice", 17, 88, 85],
[<"Eve", 13, 84, 77]
]
Accessing a field requires a proof that field exists in the schema.
We can prove that a schema has a certain field by constructing a proof object of type HasField schema name type.
For simple examples, Idris can find these proofs automatically:
Main> column "name" gradebook
[<"Bob", "Alice", "Eve"]
For a more complicated example, you may need to construct them yourself:
grades : Bool -> SnocList Nat
grades getFinal = do
let (fld ** prf) = the (fld : String ** HasField _ fld Nat) $ if getFinal
then ("final" ** %search)
else ("midterm" ** %search)
column fld @{prf} gradebookSee here for sample implementations of the B2T2 example programs.