see Alternative.hs