Added datatypes and function spec (incomplete)