Towards Idris Version 1.0
Any ideas why the effect system may be deprecated in favour of the state machine&#x2F;indexed monads system? To me, they seem to be fulfilling two different requirements: algebraic effects let us call &#x27;operations&#x27; in an expression by writing placeholder values, track the usage of such operations in the type, and plug in the implementation afterwards. For example, we can write &quot;print&quot; as a placeholder, give it a &quot;StdOut&quot; effect type, and provide a production implementation which writes to the program&#x27;s stdout, a test implementation which produces a normal String value for us to check, a remote implementation which writes to a WebSocket, etc.<p>The state machine stuff seems to mostly be concerned with using types to keep track of state, in terms of which actions are available or unavailable, e.g. you can&#x27;t close a file unless it&#x27;s open, you can&#x27;t read from a file unless it&#x27;s open, you can&#x27;t run an expression unless it closes all of its files, etc.<p>There&#x27;s certainly overlap, but I&#x27;m not sure whether one subsumes the other.