add Free.map
add list monad instance
implement