<meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">Hello (first post),</span><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">I have spent so many time learning typeclasses and thinking it was part of Haskell essence... and suddenly I read the discussion &quot;[Haskell-beginners] Can fields in a record be optional?&quot;.</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">So typeclasses are not always recomended?</span></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; "><br>
</span></div><div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">I&#39;m implementing a Machine Learning framework and I am in a sort of related dilemma.</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; "><br></span></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">I found three ways of implementing the same distance function between &quot;examples&quot; (aka &quot;attribute vectors&quot; or simply </span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">&quot;Float vectors&quot; for mere mortals :) </span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">):</span></div>
<meta http-equiv="content-type" content="text/html; charset=utf-8"><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; "><br></span></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">[obs: &quot;Example&quot; datatype will be added more fields later]</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; "><br></span></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">--------------first------------------------------------</span></div>
<div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">module ML where</span></font></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "><br>
</span></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">data Example =</span></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">     Example [Float] deriving (Show)</span></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">class ExampleClass a where</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">     (distance) :: a →  a →  Float</span></font></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "><br>
</span></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">instance <meta http-equiv="content-type" content="text/html; charset=utf-8">ExampleClass Example where</span></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">   (Example atts1) <meta http-equiv="content-type" content="text/html; charset=utf-8">distance (Example atts2) =</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">        sqrt $ sum $ map (λ(x, y) →  (x-y)↑2) $ zip atts1 atts2</span></font></div><div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">
=================================</div></div><div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; "><br></div><div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">
<br></div><div><span class="Apple-style-span" style="font-size: 13px; "><meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="font-size: small; "><div style="border-collapse: separate; font-family: arial; ">
<span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">--------------second------------------------------------</span></div><div><div><font class="Apple-style-span" face="arial, sans-serif"><meta http-equiv="content-type" content="text/html; charset=utf-8"><div>
<div style="border-collapse: separate; font-family: arial; "><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; ">module ML where</span></font></div><div style="border-collapse: separate; font-family: arial; ">
<span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "><br></span></div><div style="border-collapse: separate; font-family: arial; "><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">data Example =</span></div>
<div style="border-collapse: separate; font-family: arial; "><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">    Example {attributes :: [Float]} deriving (Show)</span></div>
<div style="border-collapse: separate; font-family: arial; "><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; "><br></span></font></div></div></font></div>
</div></span></span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">distance :: </span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">Example</span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "> →  </span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">Example</span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "> →  Float</span></div>
<meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="content-type" content="text/html; charset=utf-8"><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">distance</span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "> ex1 ex2 =</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">        sqrt $ sum $ map (λ(x, y) →  (x-y)↑2) $</span></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">                zip (attributes ex1)</span><span class="Apple-style-span" style="font-size: 13px; "><span class="Apple-style-span" style="font-size: small; "><meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "> (attributes ex2)</span><div>
<div><font class="Apple-style-span" face="arial, sans-serif"><div><div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">=================================</div></div><div style="border-collapse: separate; font-family: arial; ">
<br></div><div style="border-collapse: separate; font-family: arial; "><br></div><div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div><span class="Apple-style-span" style="font-size: 13px; "><span class="Apple-style-span" style="font-size: small; "><div style="border-collapse: separate; font-family: arial; ">
<span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">--------------third------------------------------------</span></div><div><div><font class="Apple-style-span" face="arial, sans-serif"><div>
<div style="border-collapse: separate; font-family: arial; "><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; ">module ML where</span></font></div><div style="border-collapse: separate; font-family: arial; ">
<span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "><br></span></div></div></font></div></div></span></span></div></div></font></div></div></span></span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "><meta http-equiv="content-type" content="text/html; charset=utf-8">data Example =</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">       Example [Float] deriving (Show)</span><span class="Apple-style-span" style="font-size: 13px; "><span class="Apple-style-span" style="font-size: small; "><div>
<div><font class="Apple-style-span" face="arial, sans-serif"><div><div><span class="Apple-style-span" style="font-size: 13px; "><span class="Apple-style-span" style="font-size: small; "><div><div><font class="Apple-style-span" face="arial, sans-serif"><div>
<div style="border-collapse: collapse;"><br></div></div></font></div></div></span></span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">distance :: </span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">Example</span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "> →  </span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">Example</span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "> →  Float</span></div>
</div></font></div></div></span></span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "><meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="border-collapse: separate; "><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">distance</span><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "> (</span></span>Example att1) </span><span class="Apple-style-span" style="font-size: 13px; "><span class="Apple-style-span" style="font-size: small; "><meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "><span class="Apple-style-span" style="border-collapse: separate; "><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">(</span></span></span></span></span><span class="Apple-style-span" style="font-size: 13px; "><span class="Apple-style-span" style="font-size: small; "><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">Example att2) =</span></span></span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">      sqrt $ sum $ map (λ(x, y) →  (x-y)↑2) $</span><span class="Apple-style-span" style="font-size: 13px; "><span class="Apple-style-span" style="font-size: small; "><div>
<div><font class="Apple-style-span" face="arial, sans-serif"><div style="font-family: arial; "><span class="Apple-style-span" style="font-family: arial, sans-serif; "><div style="border-collapse: separate; "><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; ">                zip (att1)</span><span class="Apple-style-span" style="font-size: 13px; "><span class="Apple-style-span" style="font-size: small; "><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; "> (att2)</span><div>
<div><font class="Apple-style-span" face="arial, sans-serif"><div><div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">=================================</div></div><div><br></div><div>
<br></div><div>All three reserves the word &quot;distance&quot; for itself and the second reserves also the word &quot;attributes&quot;.</div><div>How could I implement the module ML and which would be the best way  to set &quot;attributes&quot; outside the module?</div>
<div><br></div><div>Thanks</div><div><br></div><div><br></div><div>Davi</div></font></div></div></span></span></div></span></div></font></div></div></span></span></div></div>