úÎêø  <Chooses a template from an STGroup, or errors if not found. "Render that template using attrs. If a template k/Jv pair is repeated, it appears twice. (Perhaps a clue to buggy behavior?) 4Repeated keys could be eliminated by running clean:  ] clean = nubBy (\(a1,b1) (a2,b2) -> a1 == a2) . sortBy (\(a1,b1) (a2,b2) -> a1 `compare` a2) 5The ToSElem type is probably either String or [String] ?calculate a map of directory groups from a top-level directory -Each directory gives rise to its own groups. jGroups are independent; groups from higher in the directory structure do not have access to groups lower. The top group has key "."l (mnemonic, current directory), other groups have key names of subdirectories, including the starting ., eg "./ templates/path/to/subdir" The STGroup can'%t be shown in a useful way because it'Ps a function type, but you can at least show the directories via Data.Map.keys. mcalculate the STGroup for a given directory, filtering out files that are probably errors (eg emacs backups)  3 render1 [("name","Bill")] "Hi, my name is $name$" H render1 attribs tmpl = render . setManyAttrib attribs . newSTMP $ tmpl wrapper over find /path/to/top/ dir -type d  ; readTmplTuples = readTmplDef [("readTutTuples error","")] use ST machinery to store key/Ival configuration information, eg as a configuration hack or in web apps            HStringTemplateHelpers-0.0.3Text.StringTemplate.Helpers STDirGroupsrenderTemplateGroupdirectoryGroupsSafer dirgroupKeyslookupDirgroupdirectoryGroupSaferrender1readTmplTuples readTmplDef readTmplMrenderTemplateGroupSt<$$>badTmplVarNamefindDirectoriesrunS runStringssafeRead