 <blockquote> <p>Is Task a specific case where we rely on the native javascript implementation of Task?</p> </blockquote> <p>Exactly. You'll notice that <code>Task</code> the type but not <code>Task</code> the tag (thing on the right) are exported from the module, so you can't actually access the latter. It's a placeholder to make the type system happy.</p> <p>Instead, the Native JavaScript implementation knows what tasks <em>really</em> are, which is <a href="https://github.com/elm-lang/core/blob/2.1.0/src/Native/Task.js#L18-L58" rel="nofollow">a JS object</a>. Any native module dealing with Tasks (either the <code>Task</code> module or any third-party library like <code>elm-http</code>) is in on the secret. However, the <code>Task</code> module exports a good number of helper functions that you can have a lot of control over tasks using only the already published libraries.</p> <p>Clarification Edit: Yes, you need to use a third-party library to get a task that actually does some effect in the outside world. To actually run that task, you need to send it out a port; until you do that a Task is just a <em>description</em> of the work to do.</p>