A shallow embedding would typically use just functions - a famous example is Paul Hudak's "region server". A deep embedding would build syntax - represented with data types - and interpret the syntax or compile the syntax for another use (so called "off-shoring" e.g. Conal Elliott's Pan).