use Control.Applicative optional

http://stackoverflow.com/questions/17579545/need-to-decode-16-bit-unsigned-big-endian-bytes-into-integers-in-haskell?noredirect=1#comment25586859_17579545