[Haskell-cafe] Type infer
Marco Túlio Gontijo e Silva
malebria at riseup.net
Thu Jan 25 07:57:14 EST 2007
Em Qua, 2007-01-24 às 20:36 -0500, Bryan Donlan escreveu:
> Marco Túlio Gontijo e Silva wrote:
> > Hello,
> >
> > I'm trying to define a partition__ function that is like
> > Data.Set.partition, but use State Monad:
> >
> >> import Data.Set
> >> import Control.Monad.State
> >
> >> partition__ f =
> >> do
> >> snapshot <- get
> >> let
> >> (firsts, rest) = Set.partition f snapshot
> >> put rest
> >> return firsts
> >
> > When I try to infer it's type in ghci I got:
> >
> > $ ghci
> > ___ ___ _
> > / _ \ /\ /\/ __(_)
> > / /_\// /_/ / / | | GHC Interactive, version 6.6, for Haskell 98.
> > / /_\\/ __ / /___| | http://www.haskell.org/ghc/
> > \____/\/ /_/\____/|_| Type :? for help.
> >
> > Loading package base ... linking ... done.
> > Prelude> :load partition.hs
> > [1 of 1] Compiling Main ( partition.hs, interpreted )
> > Ok, modules loaded: Main.
> > *Main> :type partition__
> > partition__ :: (MonadState (Set a) t, Ord a) => (a -> Bool) -> t (Set a)
> >
> > Ok, then I add
> >
> >> partition__ :: (MonadState (Set a) t, Ord a) => (a -> Bool) -> t (Set
> > a)
> >
> > to the file and then:
> >
> > *Main> :reload
> > [1 of 1] Compiling Main ( partition.hs, interpreted )
> >
> > partition.hs:4:0:
> > Non type-variable argument in the constraint: MonadState (Set a) t
> > (Use -fglasgow-exts to permit this)
> > In the type signature for `partition__':
> > partition__ :: (MonadState (Set a) t, Ord a) =>
> > (a -> Bool) -> t (Set a)
> > Failed, modules loaded: none.
> >
> > Why do I need glasgow-exts to specify a type infered by GHCi without
> > -fglasgow-exts?
>
> I'd imagine the check that you're using -fglasgow-exts is performed when
> parsing type signatures from the parser. When you allow GHC to infer the
> type, it's pulling that from Control.Monad.State, which was compiled
> with -fglasgow-exts - it's simply not checking that all the types you
> might infer from there are legal without -fglasgow-exts.
Makes sense, but isn't it a bug? It shouldn't be able infer types that
are not allowed without -fglasgow-exts, right?
Thanks.
--
malebria
Marco Túlio Gontijo e Silva
Correio (MSN): malebria at riseup.net
Jabber (GTalk): malebria at jabber.org
Ekiga: malebria at ekiga.net
IRC: malebria at irc.freenode.net
malebria at irc.oftc.org
Skype: marcotmarcot
Telefone: 33346720
Celular: 98116720
Endereço:
Rua Paula Cândido, 257/201
Gutierrez 30430-260
Belo Horizonte/MG Brasil
More information about the Haskell-Cafe
mailing list