Just for larks, here is a side by side of the various compilers core for
the example on that page:

Haskell:

> module FibMain where
>
> main xs = pam daeh xs
>
> daeh (x:xs) = x
>
> pam f [] = []
> pam f (x:xs) = f x : pam f xs

Yhc:

> FibMain.pam v220 v221 =
>     case v221 of
>         Prelude.[] -> (Prelude.[])
>         Prelude.: v222 v223 ->
>             (Prelude.: (YHC.Internal._apply1 v220 v222) (FibMain.pam v220 
> v223))
>
> FibMain.daeh v224 =
>     case v224 of
>          Prelude.: v225 v226 -> v225
>          _ -> (Prelude.error (LAMBDA228))
>
> LAMBDA228 =
>     (prim_STRING "FibMain: Pattern match failure in function at 7:1-7:15.")
>
> FibMain.main v227 = (FibMain.pam FibMain.daeh v227)


Jhc:  (unicodey!)

> FibMain.main = ΛFibMain.v22.λFibMain.1_xs∷[[FibMain.v22]].(let
>         x9282∷[FibMain.v22] → FibMain.v22 = λx9284∷[FibMain.v22].(case x9284 
> of
>                 (x9286∷FibMain.v22):(x9288∷[FibMain.v22]) → x9286;
>                 Prelude.[] →
>                     <⊥:test/fibmain.hs:5:13: Unmatched pattern∷FibMain.v22>;);
>         x9280∷⋆ = [FibMain.v22];
>         in FibMain.pam x9280 FibMain.v22 x9282 FibMain.1_xs)
> FibMain.pam = ΛFibMain.v5.ΛFibMain.v10.λx9296∷FibMain.v5 → 
> FibMain.v10.λx9298∷[FibMain.v5].(case x9298 of
>         (x9300∷FibMain.v5):(x9302∷[FibMain.v5]) → let x9316∷[FibMain.v10] =
>                                                           FibMain.pam 
> FibMain.v5 FibMain.v10 x9296 x9302;
>                                                       x9314∷FibMain.v10 =
>                                                           x9296 x9300;
>                 in x9314:x9316;
>         Prelude.[] → "";)
> FibMain.daeh = ΛFibMain.v15.λx9284∷[FibMain.v15].(case x9284 of
>         (x9286∷FibMain.v15):(x9288∷[FibMain.v15]) → x9286;
>         Prelude.[] →
>             <⊥:test/fibmain.hs:5:13: Unmatched pattern∷FibMain.v15>;)

ghc:

>   daeh :: %forall a . [] a -> a =
>     \ @ a (ds::[] a) ->
>       %case (a) ds %of (wild::[] a)
>         {[] ->
>            GHC.Err.patError @ a
>            ("test/fibmain.hs:5:0-14|function daeh"::Addr#);
>          : (x::a) (xs::[] a) ->
>            x};
>   pam :: %forall a a1 . (a -> a1) ->
>                       [] a -> [] a1 =
>     \ @ a @ a1 ->
>       %let %rec
>            {pam1 :: (a -> a1) -> [] a -> [] a1 =
>               \ (f::a -> a1) (ds::[] a) ->
>                   %case (([] a1)) ds %of (wild::[] a)
>                     {[] ->
>                        [] @ a1;
>                      : (x::a) (xs::[] a) ->
>                        : @ a1 (f x) (pam1 f xs)}}
>       %in pam1;
>   main :: %forall a . [] ([] a) ->
>                     [] a =
>     \ @ a (xs::[] ([] a)) ->
>       FibMain.pam @ ([] a) @ a (FibMain.daeh @ a) xs;



I don't think a common compiler level core is forthcoming :)


        John


--
John Meacham - ⑆repetae.net⑆john⑈
_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://haskell.org/mailman/listinfo/haskell-prime

Reply via email to