Well, for JSON, I think the rendered string must be enclosed in double quotes, which is what the show instance for String does.<div><div><br></div><div>So</div><div><br></div><div>renderJValue (JString s)    = show s</div>
<div><br></div><div>is not the same as</div><div><br></div><div><div>renderJValue (JString s)    = s</div><div><br></div><div>You can easily see this with GHCi. A copy from my Windows session:</div><div><br></div><div><div>
<span class="Apple-style-span" style="font-family: &#39;courier new&#39;, monospace;">C:\&gt;ghci</span></div><div><span class="Apple-style-span" style="font-family: &#39;courier new&#39;, monospace;">GHCi, version 6.10.1: <a href="http://www.haskell.org/ghc/">http://www.haskell.org/ghc/</a>  :? for help</span></div>
<div><span class="Apple-style-span" style="font-family: &#39;courier new&#39;, monospace;">Loading package ghc-prim ... linking ... done.</span></div><div><span class="Apple-style-span" style="font-family: &#39;courier new&#39;, monospace;">Loading package integer ... linking ... done.</span></div>
<div><span class="Apple-style-span" style="font-family: &#39;courier new&#39;, monospace;">Loading package base ... linking ... done.</span></div><div><span class="Apple-style-span" style="font-family: &#39;courier new&#39;, monospace;">Prelude&gt; let s = &quot;Haskell&quot;</span></div>
<div><span class="Apple-style-span" style="font-family: &#39;courier new&#39;, monospace;">Prelude&gt; s</span></div><div><span class="Apple-style-span" style="font-family: &#39;courier new&#39;, monospace;">&quot;Haskell&quot;</span></div>
<div><span class="Apple-style-span" style="font-family: &#39;courier new&#39;, monospace;">Prelude&gt; show s</span></div><div><span class="Apple-style-span" style="font-family: &#39;courier new&#39;, monospace;"><span class="Apple-style-span" style="font-weight: bold;">&quot;\&quot;Haskell\&quot;&quot;</span></span></div>
<div><span class="Apple-style-span" style="font-family: &#39;courier new&#39;, monospace;">Prelude&gt; show (show s)</span></div><div><span class="Apple-style-span" style="font-family: &#39;courier new&#39;, monospace;">&quot;\&quot;\\\&quot;Haskell\\\&quot;\&quot;&quot;</span></div>
<div><span class="Apple-style-span" style="font-family: &#39;courier new&#39;, monospace;">Prelude&gt;</span></div></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br><div class="gmail_quote">
On Thu, Mar 26, 2009 at 4:41 PM, 7stud <span dir="ltr">&lt;<a href="mailto:bbxx789_05ss@yahoo.com">bbxx789_05ss@yahoo.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
In chapter 5, RWH defines a JValue data type like this:<br>
<br>
<br>
SimpleJSON.hs:<br>
--------------<br>
<br>
module SimpleJSON<br>
    (<br>
     JValue(..)<br>
    ) where<br>
<br>
data JValue = JNumber Double<br>
            | JString String<br>
            | JArray [JValue]<br>
            | JObject [(String, JValue)]<br>
            | JBool Bool<br>
            | JNull<br>
              deriving (Eq, Ord, Show)<br>
<br>
------------<br>
<br>
<br>
Then RWH defines some functions like this:<br>
<br>
PutJSON.hs:<br>
----------<br>
module PutJSON where<br>
<br>
import SimpleJSON<br>
<br>
renderJValue::JValue-&gt;String<br>
renderJValue (JNumber f)    = show f<br>
renderJValue (JString s)    = show s<br>
renderJValue (JBool True)   = &quot;true&quot;<br>
renderJValue (JBool False)  = &quot;false&quot;<br>
renderJValue JNull          = &quot;null&quot;<br>
----------<br>
<br>
My question is about the function:<br>
<br>
renderJValue (JString s) = show s<br>
<br>
A JString value contains a string, so why does the function use<br>
show to convert s to a string?  Why isn&#39;t that function defined<br>
like this:<br>
<br>
renderJValue (JString s) = s<br>
<br>
Using that modified function seems to work:<br>
<br>
<br>
Main.hs:<br>
---------<br>
module Main () where<br>
<br>
import SimpleJSON<br>
import PutJSON<br>
<br>
main = let x = JString &quot;hello&quot;<br>
       in putStrLn (renderJValue x)<br>
<br>
<br>
$ ghc -o simple Main.hs PutJSON.hs SimpleJSON.hs<br>
/usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: warning -F: directory name<br>
(/Users/me/Library/Frameworks) does not exist<br>
<br>
$ simple<br>
hello<br>
<br>
Also can anyone tell me why I always get that warning?<br>
<br>
Thanks<br>
<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
</blockquote></div><br></div></div></div>