#!/usr/bin/env bash
# Generate a module with N data types and instances
DEFS=10000
MATCHES=500
MODE=$1
echo "module Defs where" > Defs.hs;
for i in $(seq -w 1 $DEFS); do
  echo "data T$i a = T$i a deriving Show" >> Defs.hs;
done

echo "{-# LANGUAGE TypeFamilies #-}" > Match.hs
echo "{-# LANGUAGE StandaloneDeriving #-}" >> Match.hs
echo "{-# LANGUAGE EmptyDataDecls #-}" >> Match.hs
echo "module Match where" >> Match.hs
echo "import Defs" >> Match.hs

if [ $MODE -eq 0 ]; then
  for i in $(seq -w 1 $MATCHES); do
    echo "type family F$i a where" >> Match.hs;
  done
  echo "data T a = T" >> Match.hs
  for i in $(seq -w 1 $MATCHES); do
    echo "       (F$i a)" >> Match.hs;
  done
  echo "deriving instance Show (T a)" >> Match.hs;
fi
#elif [ $MODE -eq 1 ]; then
#  echo "data T " >> Match.hs
#    for i in $(seq -w 1 $MATCHES); do
#      echo "       a$i" >> Match.hs;
#    done
#    echo "       = T " >> Match.hs
#    for i in $(seq -w 1 $MATCHES); do
#      echo "       a$i" >> Match.hs;
#    done
#    echo "deriving instance Show (T" >> Match.hs
#    for i in $(seq -w 1 $MATCHES); do
#      echo "       a$i" >> Match.hs;
#    done
#    echo "    )" >> Match.hs;
#else
#  for i in $(seq -w 1 $MATCHES); do
#    echo "data F$i a" >> Match.hs;
#  done
#  echo "data T a = T" >> Match.hs
#  for i in $(seq -w 1 $MATCHES); do
#    echo "       (F$i a)" >> Match.hs;
#  done
#  echo "deriving instance Show (T a)" >> Match.hs;
#
#fi

