Such order dependent could be very confusing for the users. I thought I turned off certain feature but some other extension turning it on is strange. Wouldn't it be better to decouple GADT and MonoLocalBinds?

2015년 06월 04일 20:31에 Edward Z. Yang 이(가) 쓴 글:
This is because -XGADTs implies -XMonoLocalBinds.

Edward

Excerpts from Ki Yung Ahn's message of 2015-06-04 20:29:50 -0700:
\y -> let x = (\z -> y) in x x

is a perfectly fine there whose type is  a -> a.
(1) With no options, ghci infers its type correctly.
(2) However, with -XGADTs, type check fails and raises occurs check.
(3) We can remedy this by supplying some additional options
(4) Howver, if you put -XGADTs option at the end, it fails again :(


kyagrd@kyahp:~$ ghci
GHCi, version 7.8.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :t \y -> let x = (\z -> y) in x x
\y -> let x = (\z -> y) in x x :: t -> t
Prelude> :q
Leaving GHCi.


kyagrd@kyahp:~$ ghci -XGADTs
GHCi, version 7.8.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :t \y -> let x = (\z -> y) in x x

<interactive>:1:30:
      Occurs check: cannot construct the infinite type: t0 ~ t0 -> t
      Relevant bindings include
        x :: t0 -> t (bound at <interactive>:1:11)
        y :: t (bound at <interactive>:1:2)
      In the first argument of ‘x’, namely ‘x’
      In the expression: x x
Prelude> :q
Leaving GHCi.


~$ ghci -XGADTs -XNoMonoLocalBinds -XNoMonomorphismRestriction
GHCi, version 7.8.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :t \y -> let x = (\z -> y) in x x
\y -> let x = (\z -> y) in x x :: t -> t
Prelude> :q
Leaving GHCi.


~$ ghci -XNoMonoLocalBinds -XNoMonomorphismRestriction -XGADTs
GHCi, version 7.8.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :t \y -> let x = (\z -> y) in x x

<interactive>:1:30:
      Occurs check: cannot construct the infinite type: t0 ~ t0 -> t
      Relevant bindings include
        x :: t0 -> t (bound at <interactive>:1:11)
        y :: t (bound at <interactive>:1:2)
      In the first argument of ‘x’, namely ‘x’

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users



_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users

Reply via email to