&gt; Is manual resource management with linear types a must? Because that&#x27;s a big bummer.<p>Manual resource management is generally a given in functional languages with linear types. Since your types are linear, you need functions which can destroy your linear types, and generally those functions are called manually. There are certain other approaches you could adopt in a new language -- e.g. you could use C++-like &quot;destructors&quot; where if you don&#x27;t do anything with a value and it falls out of scope, a function to dispose of the value automatically gets called.  I haven&#x27;t seen that implemented in a functional language with linear types, though.  I don&#x27;t know how well it would play with type inference.  Generally, though, linearly typed languages don&#x27;t worry about this.<p>&gt; Also how is that compare to Rust?<p>Rust doesn&#x27;t have linear types -- Rust has unique&#x2F;affine types. An affine value can be used 0 or 1 times (unlike linear values which can only be used exactly 1 time).  So in Rust it&#x27;s possible to &quot;lose&quot; a value by throwing it away or by creating an RC cycle and leaking it.  A linear type system wouldn&#x27;t let you do that.  However, Rust does have those automatic destructors which keep you from having to destroy everything manually.<p>&gt; If it&#x27;s not, is it possible to incorporate it into an existing language with e.g. HM types?<p>HM in and of itself knows nothing about linearity and so you need additional support from the typechecker to implement it.  Plenty of languages have extended HM to include linearity, though.