>From Real World Haskell:<br><br>data JValue = JString String<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | JNumber Double<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | JBool Bool<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | JNull<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | JObject [(String, JValue)]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | JArray [JValue]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deriving (Eq, Ord, Show)<br><br>....<br>type JSONError = String<br><br>class JSON a where<br>&nbsp;&nbsp;&nbsp; toJValue :: a -&gt; JValue<br>&nbsp;&nbsp;&nbsp; fromJValue :: JValue -&gt; Either JSONError a<br><br>instance JSON JValue where<br>
&nbsp;&nbsp;&nbsp; toJValue = id -- Really ? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; fromJValue = Right<br><br><blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote"><span id="comments_x_dB" class="comment"></span>Now, instead of applying a constructor like
      <code class="code">JNumber</code> to a value to wrap it, we apply the
      <code class="function">toJValue</code> function.  If we change a value&#39;s
      type, the compiler will choose a suitable implementation of
      <span class="type">toJValue</span> to use with it.</blockquote><div><br>Actually it does not work. And I don&#39;t see how it could with this toJValue implementation. Is it possible to make it work by providing another implementation?<br>
<br>Oscar<br></div>