[Haskell-cafe] weird type signature in Arrow Notation

Sebastian Fischer fischer at nii.ac.jp
Fri Aug 5 03:10:50 CEST 2011


here is a reduced program that still segfaults:

{-# LANGUAGE Arrows #-}

import Control.Arrow

main :: IO ()
main = print segfault

segfault :: [()]
segfault = anythingYouWant ()

anythingYouWant :: a
anythingYouWant = testB False (const ()) ()

testB :: ArrowChoice arrow
      => bool -> arrow () () -> arrow () anything
testB bool arrow =
  proc () ->
    do if bool then arrow -< ()
               else arrow -< ()

Sebastian

On Fri, Aug 5, 2011 at 6:20 AM, Brent Yorgey <byorgey at seas.upenn.edu> wrote:

> On Tue, Aug 02, 2011 at 05:08:33PM -0400, bob zhang wrote:
> > hi, all
> > testB :: (ArrowChoice t1, Num a1, Num a) => (a -> a1 -> t2) -> t1 a t3
> > -> t1 a1 t3 -> t1 (a, a1) t
> > testB f g h = proc (x,y) -> do
> > if (f x y)then g -< x + 1 else h -< y + 2
> >
> > it's very strange that the type of _f_ is (a->a1->t2) which I thought
> > should be a -> a1 -> Bool,
> >
> > btw, is there any way to get the output of preprocessing using -XArrow
> > extensions,
> >
> > Thanks a lot
> > best, bob
>
> Congratulations, you have definitely found a GHC bug!  Note there are
> actually two things wrong with testB's type signature: first, t2 ought
> to be Bool, as you note.  But even worse, notice that the return type
> of the result arrow, t, has nothing to do with any of the other types!
> This means that we can use testB along with the (->) instance for
> Arrow to construct elements of arbitrary types:
>
>  ghci> let anythingYouWant = testB (\x y -> False) (const 3) (const 2)
> (2,2)
>  ghci> :t anythingYouWant
>  anythingYouWant :: t
>  ghci> anythingYouWant :: Integer
>  2
>  ghci> anythingYouWant :: Int
>  2
>  ghci> anythingYouWant :: Double
>  1.0e-323
>  ghci> anythingYouWant :: Char
>  '\STX'
>  ghci> (anythingYouWant :: (Double -> Double) -> [Double]) sqrt
>  [
>  [1]    17391 segmentation fault  ghci
>
> whoops!
>
> I'm using GHC 7.0.3, but Daniel Wagner and I also tried it (with the
> same results) on GHC 7.2.0rc1 and GHC HEAD.
>
> I wasn't able to find a ticket for this on the GHC bug tracker, I
> guess we should file one!
>
> I tried to find a way to get the output of preprocessing using -XArrow
> but wasn't able to find one (other than -ddump-ds which gives you the
> unoptimized *GHC core* output, which is quite hard to read).
>
> -Brent
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20110805/3e1d415e/attachment.htm>


More information about the Haskell-Cafe mailing list