add some antiqotes
rewite to use typed template haskell where possible