to address Haskell's difficulties in reasoning about lazy evaluation and in using traditional data structures such as mutable arrays. He argues (p. 20) that "destructive update furnishes the programmer with two important and powerful tools ... a set of efficient array-like data structures for managing collections of objects, and ... the ability to broadcast a new value to all parts of a program with minimal burden on the programmer." Robert Harper, one of the authors of Standard ML, has given his reasons for not using Haskell to teach introductory programming. Among these are the difficulty of reasoning about resource use with non-strict evaluation, that lazy evaluation complicates the definition of datatypes and inductive reasoning, and the "inferiority" of Haskell's (old) class system compared to ML's module system. Haskell's build tool, Cabal, has historically been criticized for poorly handling multiple versions of the same library, a problem known as "Cabal hell". The Stackage server and Stack build tool were made in response to these criticisms. Cabal itself now has a much more sophisticated build system, heavily inspired by Nix, which became the default with version 3.0. Related languages Clean is a close, slightly older relative of Haskell. Its biggest deviation from Haskell is in the use of uniqueness types instead of monads for I/O and side-effects. A series of languages inspired by Haskell, but with different type systems, have been developed, including: Agda, a functional language with dependent types. Cayenne, with dependent types. Elm, a functional language to create web front-end apps, no support for user-defined or higher-kinded type classes or instances. Epigram, a functional language with dependent types suitable for proving properties of programs. Idris, a general purpose functional language with dependent types, developed at the University of St Andrews. PureScript compiles to JavaScript. Ωmega, strict and more. Other related languages include: Curry, a functional/logic programming language based on Haskell. Notable Haskell variants include: Generic Haskell, a version of Haskell with type system support for generic programming. Hume, a strict functional language for embedded systems based on processes as stateless automata over a sort of tuples of one element mailbox channels where the state is kept by feedback into the mailboxes, and a mapping description from outputs to channels as box wiring, with a Haskell-like expression language and syntax. Conferences and workshops The Haskell community meets regularly for research and development activities. The main events are: International Conference on Functional