Re: Monomorphizing GHC Core?

2014-06-19 Thread Edward Kmett
Might you have more success with a Reynolds style defunctionalization pass
for the polymorphic recursion you can't eliminate?

Then you wouldn't have to rule out things like

data Complete a = S (Complete (a,a)) | Z a

which don't pass that test.

-Edward


On Thu, Jun 19, 2014 at 3:28 PM, Conal Elliott co...@conal.net wrote:

 Has anyone worked on a monomorphizing transformation for GHC Core? I
 understand that polymorphic recursion presents a challenge, and I do indeed
 want to work with polymorphic recursion but only on types for which the
 recursion bottoms out statically (i.e., each recursive call is on a smaller
 type). I'm aiming at writing high-level polymorphic code and generating
 monomorphic code on unboxed values. This work is part of a project for
 compiling Haskell to hardware, described on my blog (http://conal.net).

 Thanks,  - Conal

 ___
 Glasgow-haskell-users mailing list
 Glasgow-haskell-users@haskell.org
 http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Monomorphizing GHC Core?

2014-06-19 Thread Conal Elliott
Thanks, Ed. It hadn't occurred to me that defunctionalization might be
useful for monomorphization. Do you know of a connection?

I'm using a perfect leaf tree type similar to the one you mentioned but
indexed by depth:

 data Tree :: (* - *) - Nat - * - * where
   L :: a - Tree k 0 a
   B :: Tree k n (k a) - Tree k (1+n) a

Similarly for top-down perfect leaf trees:

 data Tree :: (* - *) - Nat - * - * where
   L :: a - Tree k 0 a
   B :: k (Tree k n a) - Tree k (1+n) a

This way, after monomorphization, there won't be any sums remaining.

  -- Conal


On Thu, Jun 19, 2014 at 1:22 PM, Edward Kmett ekm...@gmail.com wrote:

 Might you have more success with a Reynolds style defunctionalization pass
 for the polymorphic recursion you can't eliminate?

 Then you wouldn't have to rule out things like

 data Complete a = S (Complete (a,a)) | Z a

 which don't pass that test.

 -Edward


 On Thu, Jun 19, 2014 at 3:28 PM, Conal Elliott co...@conal.net wrote:

  Has anyone worked on a monomorphizing transformation for GHC Core? I
 understand that polymorphic recursion presents a challenge, and I do indeed
 want to work with polymorphic recursion but only on types for which the
 recursion bottoms out statically (i.e., each recursive call is on a smaller
 type). I'm aiming at writing high-level polymorphic code and generating
 monomorphic code on unboxed values. This work is part of a project for
 compiling Haskell to hardware, described on my blog (http://conal.net).

 Thanks,  - Conal

 ___
 Glasgow-haskell-users mailing list
 Glasgow-haskell-users@haskell.org
 http://www.haskell.org/mailman/listinfo/glasgow-haskell-users



___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: Monomorphizing GHC Core?

2014-06-19 Thread Edward Kmett
I think the first time I saw a connection to polymorphic recursion was in
Neil Mitchell's supero, which used it as a catch-all fallback plan.

http://community.haskell.org/~ndm/downloads/slides-haskell_with_go_faster_stripes-30_nov_2006.pdf

-Edward


On Thu, Jun 19, 2014 at 4:49 PM, Conal Elliott co...@conal.net wrote:

 Thanks, Ed. It hadn't occurred to me that defunctionalization might be
 useful for monomorphization. Do you know of a connection?

 I'm using a perfect leaf tree type similar to the one you mentioned but
 indexed by depth:

  data Tree :: (* - *) - Nat - * - * where
L :: a - Tree k 0 a
B :: Tree k n (k a) - Tree k (1+n) a

 Similarly for top-down perfect leaf trees:

  data Tree :: (* - *) - Nat - * - * where
L :: a - Tree k 0 a
B :: k (Tree k n a) - Tree k (1+n) a

 This way, after monomorphization, there won't be any sums remaining.

   -- Conal



 On Thu, Jun 19, 2014 at 1:22 PM, Edward Kmett ekm...@gmail.com wrote:

 Might you have more success with a Reynolds style defunctionalization
 pass for the polymorphic recursion you can't eliminate?

 Then you wouldn't have to rule out things like

 data Complete a = S (Complete (a,a)) | Z a

 which don't pass that test.

 -Edward


 On Thu, Jun 19, 2014 at 3:28 PM, Conal Elliott co...@conal.net wrote:

  Has anyone worked on a monomorphizing transformation for GHC Core? I
 understand that polymorphic recursion presents a challenge, and I do indeed
 want to work with polymorphic recursion but only on types for which the
 recursion bottoms out statically (i.e., each recursive call is on a smaller
 type). I'm aiming at writing high-level polymorphic code and generating
 monomorphic code on unboxed values. This work is part of a project for
 compiling Haskell to hardware, described on my blog (http://conal.net).

 Thanks,  - Conal

 ___
 Glasgow-haskell-users mailing list
 Glasgow-haskell-users@haskell.org
 http://www.haskell.org/mailman/listinfo/glasgow-haskell-users




___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users