<div dir="ltr">Ok, I can't seem to figure out how to make this work, and since I'm using ClassyPrelude (from classy-prelude, latest version on hackage as of yesterday), I think cafe is a better place to ask than beginners. Sorry if this should have gone there.<div><br></div><div>I want to read in a list of files, concatenate them, and then run the resulting data through a "process" function. So far, no problem. Given an opts record that contains the list of files and some control for the process function, this expression works:</div><div><br></div><div>hPut stdout =<< process opts . concat</div><div><$> mapM (readFile . fpFromString) (files opts)</div><div><br></div><div>(BTW, recommendations on cleaning that up gratefully accepted)</div><div><br></div><div>However, I'd like to be able to read them all as either Text or ByteString, depending on options being passed to me. This doesn't work so well. If I give process a type of Text -> Text or ByteString->ByteString, everything works fine with no other changes. However, any attempt to make it polymorphic fails with ambiguous type warnings.</div><div><br></div><div>I've tried a slew of things, and found a few that work. But none of them are what I'd call good, much less elegant. Is there a good way to do this?</div></div>