Okay, so looking back I should have provided more details in the last post, as it does not explain the issues I was encountering etc. I posted it right before I went to bed, and that's why I rushed it.
Anyways, I wanted to explain how I solved my problem so that others could learn. Basically, I was using ATS' built-in libc binding to open and read a file. The pointer for the file was a linear type, I wasn't using the prelude's non-linear file type. What my code did is read characters to a 'stream_vt' with the 'getc' function until it reached the end of the file. I also planned to have other functions that would discard parts of the stream I didn't need so that I could turn the values I needed into other values (AKA, typical file-parsing stuff.) The problem came when I needed to close the file. Despite the use of linear types, freeing the file pointer would not prevent the stream from being access due to its laziness. My solution was to essentially combine the view for the file pointer and the stream into a single type, and thus requiring both to be freed at once.
Moral of the story? Linear types are amazing, one of the reasons I love ATS, but they are not a silver bullet. They too are limited by what can be statically inferred by the compiler, and effects such as lazy values cannot be predicted by the compiler. I hope someone was able to learn something from my post, and let me know if you have any questions.