#!/bin/bash SRCDIR=src MODULES=(Utils Menu Level Mode MainMenu) MAIN_MODULE=Main PRAGMA_PATTERN='^{-# LANGUAGE [a-zA-Z]\+ #-}$' IMPORT_PATTERN='^import ' sourceFile() { printf "${SRCDIR}/${1}.hs" } pragmas() { grep -rh "${PRAGMA_PATTERN}" "${SRCDIR}" | sort -u } imports() { local modulesPattern="$(echo ${MODULES[@]} | sed 's: :\\|:g')" grep -rh "${IMPORT_PATTERN}" "${SRCDIR}" | grep -v "\(${modulesPattern}\)" | sort -u } body() { grep -vh "${PRAGMA_PATTERN}" "$(sourceFile "${1}")" |\ uncork |\ grep -v "${IMPORT_PATTERN}" |\ cat -s } uncork() { LINE="null" while ([ -z "${LINE}" ] || [ -n "${LINE%%module*}" ]); do read LINE; done while [ -n "${LINE}" ]; do read LINE; done cat } pragmas grep '^module' "$(sourceFile ${MAIN_MODULE})" printf "\n" imports for module in ${MODULES[@]} do body "${module}" done body "${MAIN_MODULE}"