add helper function
support applicative style
fix signature
add choice and opt
fix lazy value
use do!
fix from List.partition to List.span