mkGBuiltIn BuiltIn{..} = Map.fromList
  [ (biInt, DataGen [] (const . sized $ \n -> getRandomR (-n, n) >>= return . DInt))
  , (biList, DataGen [biListArg] (\subgen -> sized' $ \n -> do
      let m = intSquareRoot n
      l <- getRandomR (0, m)
      xs <- replicateM l $ resize m (subgen Map.! biListArg)
      return $ foldl' (\ t x -> DCon biListCons [x, t]) (DCon biListNil []) xs))
  ]
mkGBuiltIn BuiltIn{..} = Map.fromList
  [ (biInt, DataGen [] (const . sized $ \n -> getRandomR (-n, n) >>= return . DInt))
  , (biList, DataGen [biListArg] (\subgen -> sized' $ \n -> do
      let m = intSquareRoot n
      l <- getRandomR (0, m)
      xs <- replicateM l $ resize m (subgen Map.! biListArg)
      return $ foldl' (\ t x -> DCon biListCons [x, t]) (DCon biListNil []) xs))
  ]
mkGBuiltIn BuiltIn{..} = Map.fromList
  [ (biInt, DataGen [] (const . sized $ \n -> getRandomR (-n, n) >>= return . DInt))
  , (biList, DataGen [biListArg] (\subgen -> sized' $ \n -> do
      let m = intSquareRoot n
      l <- getRandomR (0, m)
      xs <- replicateM l $ resize m (subgen Map.! biListArg)
      return $ foldl' (\ t x -> DCon biListCons [x, t]) (DCon biListNil []) xs))
  ]