Hi Roman,<br><br>Thanks for the suggestion, but that doesn&#39;t seem to change things.<br><br><br>Cheers,<br>Pedro<br><br><div class="gmail_quote">2011/1/19 Roman Leshchinskiy <span dir="ltr">&lt;<a href="mailto:rl@cse.unsw.edu.au">rl@cse.unsw.edu.au</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div bgcolor="#FFFFFF"><div>Have you tried adding another (dummy) method to the class? GHC used to have problems with optimising single-method classes in the past.</div>
<div><br></div><div>Roman<div><div></div><div class="h5"><br><br>On 18 Jan 2011, at 10:33, José Pedro Magalhães &lt;<a href="mailto:jpm@cs.uu.nl" target="_blank">jpm@cs.uu.nl</a>&gt; wrote:<br><br></div></div></div><div><div>
</div><div class="h5"><div></div><blockquote type="cite"><div>Hello all,<br><br>I fail to understand the behavior of the inliner in the following example:<br><br><blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex; font-family: courier new,monospace;" class="gmail_quote">

module M1 where<br><br>class MyEnum a where myEnum :: [a]<br><br>instance MyEnum () where myEnum = [()]<br></blockquote><div> </div><blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex; font-family: courier new,monospace;" class="gmail_quote">

module M2 where<br><br>import M1<br><br>f1 = map (\() -&gt; &#39;p&#39;) [()]<br>f2 = map (\() -&gt; &#39;q&#39;) myEnum<br></blockquote><br>The generated core code for M2 with ghc-7.0.1 -O is:<br><br><blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex; font-family: courier new,monospace;" class="gmail_quote">

M2.f22 :: GHC.Types.Char<br>[GblId,<br> Caf=NoCafRefs,<br> Str=DmdType m,<br> Unf=Unf{Src=&lt;vanilla&gt;, TopLvl=True, Arity=0, Value=True,<br>         ConLike=True, Cheap=True, Expandable=True,<br>         Guidance=IF_ARGS [] 1 2}]<br>

M2.f22 = GHC.Types.C# &#39;q&#39;<br><br>M2.f11 :: GHC.Types.Char<br>[GblId,<br> Caf=NoCafRefs,<br> Str=DmdType m,<br> Unf=Unf{Src=&lt;vanilla&gt;, TopLvl=True, Arity=0, Value=True,<br>         ConLike=True, Cheap=True, Expandable=True,<br>

         Guidance=IF_ARGS [] 1 2}]<br>M2.f11 = GHC.Types.C# &#39;p&#39;<br><br>M2.f21 :: () -&gt; GHC.Types.Char<br>[GblId,<br> Arity=1,<br> Caf=NoCafRefs,<br> Unf=Unf{Src=&lt;vanilla&gt;, TopLvl=True, Arity=1, Value=True,<br>

         ConLike=True, Cheap=True, Expandable=True,<br>         Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)}]<br>M2.f21 =<br>  \ (ds_dch :: ()) -&gt; case ds_dch of _ { () -&gt; M2.f22 }<br><br>M2.f2 :: [GHC.Types.Char]<br>

[GblId,<br> Str=DmdType,<br> Unf=Unf{Src=&lt;vanilla&gt;, TopLvl=True, Arity=0, Value=False,<br>         ConLike=False, Cheap=False, Expandable=False,<br>         Guidance=IF_ARGS [] 3 0}]<br>M2.f2 =<br>  GHC.Base.map<br>

    @ () @ GHC.Types.Char M2.f21 M1.$fMyEnum()_$cmyEnum<br><br>M2.f1 :: [GHC.Types.Char]<br>[GblId,<br> Caf=NoCafRefs,<br> Str=DmdType,<br> Unf=Unf{Src=&lt;vanilla&gt;, TopLvl=True, Arity=0, Value=True,<br>         ConLike=True, Cheap=True, Expandable=True,<br>

         Guidance=IF_ARGS [] 1 3}]<br>M2.f1 =<br>  GHC.Types.:<br>    @ GHC.Types.Char M2.f11 (GHC.Types.[] @ GHC.Types.Char)<br></blockquote><br>So, why does the inliner fail to get rid of the map in f2, while correctly ditching it in f1? Note that using two modules is essential here: if the instance is in M2 (and thus becoming orphan), the inliner works &quot;correctly&quot;. Adding INLINE/INLINABLE pragmas to myEnum doesn&#39;t improve things either. Is this a bug, or is there a reason for this behavior?<br>

<br><br>Thanks,<br>Pedro<br>
</div></blockquote></div></div><blockquote type="cite"><div><span>_______________________________________________</span><br><span>Glasgow-haskell-users mailing list</span><br><span><a href="mailto:Glasgow-haskell-users@haskell.org" target="_blank">Glasgow-haskell-users@haskell.org</a></span><br>
<span><a href="http://www.haskell.org/mailman/listinfo/glasgow-haskell-users" target="_blank">http://www.haskell.org/mailman/listinfo/glasgow-haskell-users</a></span><br></div></blockquote></div></blockquote></div><br>