{-# LANGUAGE GADTs, NoMonomorphismRestriction #-}