{-# LANGUAGE NoMonomorphismRestriction, GADTs #-}