Re: [Haskell-cafe] use of the GHC universal quantifier
Hi Ryan, Please see below. Vasili On Wed, Jul 9, 2008 at 4:03 AM, Ryan Ingram [EMAIL PROTECTED] wrote: Try {-# LANGUAGE RankNTypes #-}? [EMAIL PROTECTED]:~/FTP/Haskell/hsql-1.7$ runhaskell Setup.lhs build Preprocessing library hsql-1.7... Building hsql-1.7... [1 of 2] Compiling Database.HSQL.Types ( Database/HSQL/Types.hs, dist/build/Database/HSQL/Types.o ) Database/HSQL/Types.hs:67:0: Can't make a derived instance of `Typeable SqlError' (You need -XDeriveDataTypeable to derive an instance for this class) In the data type declaration for `SqlError' forall does denote a universal quantifier, but because the 'implies' of the function arrow, in logic, includes negation, you can use it to emulate existential quantifiers. data Existential = forall a. Ex a The type of the constructor Ex: Ex :: forall a. a - Existential Classical logic opposed to intuitionistic logic? Pattern matching on Ex brings a back into scope (with no information about it, so this type isn't that useful on its own): use (Ex x) = 0 -- can't recover any useful information about x sample = Ex sample However, you can use existential types to encode additional information about the included data; for example: -- Ex2 :: forall a. Show a = a - Exist2 data Exist2 = forall a. Show a = Ex2 a Now, pattern matching on Ex2 brings the Show instance into scope as well: sample2 = Ex2 sample2 use2 (Ex2 x) = show x You can also use higher rank polymorphism to encode existential types: -- Ex3 :: (forall a. (forall b. Show b = b - a) - a) - Exist3 -- note the rank-3 type on Ex3! newtype Exist3 = Ex3 (forall a. (forall b. Show b = b - a) - a) sample3 = Ex3 (\k - k sample3) use3 (Ex3 f) = f (\x - show x) -- ryan 2008/7/8 Galchin, Vasili [EMAIL PROTECTED]: Hello, It seems to me by its name that forall denotes a logical universal quantifier. In any case, hsql-1.7/Database/HSQL/Types.hs uses forall at line #134. I got a nasty build so I added {-# LANGUAGE ExistentialQuantification #-} at the top of the module. Now I get the following a coupleof lines up: Database/HSQL/Types.hs:131:5: Illegal polymorphic or qualified type: forall a. Int - FieldDef - FieldDef - CString - Int - IO a - IO a In the definition of data constructor `Statement' In the data type declaration for `Statement' If seems that GHC doesn't like a. Why? Kind regards, Vasili ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] use of the GHC universal quantifier
Try {-# LANGUAGE RankNTypes #-}? forall does denote a universal quantifier, but because the 'implies' of the function arrow, in logic, includes negation, you can use it to emulate existential quantifiers. data Existential = forall a. Ex a The type of the constructor Ex: Ex :: forall a. a - Existential Pattern matching on Ex brings a back into scope (with no information about it, so this type isn't that useful on its own): use (Ex x) = 0 -- can't recover any useful information about x sample = Ex sample However, you can use existential types to encode additional information about the included data; for example: -- Ex2 :: forall a. Show a = a - Exist2 data Exist2 = forall a. Show a = Ex2 a Now, pattern matching on Ex2 brings the Show instance into scope as well: sample2 = Ex2 sample2 use2 (Ex2 x) = show x You can also use higher rank polymorphism to encode existential types: -- Ex3 :: (forall a. (forall b. Show b = b - a) - a) - Exist3 -- note the rank-3 type on Ex3! newtype Exist3 = Ex3 (forall a. (forall b. Show b = b - a) - a) sample3 = Ex3 (\k - k sample3) use3 (Ex3 f) = f (\x - show x) -- ryan 2008/7/8 Galchin, Vasili [EMAIL PROTECTED]: Hello, It seems to me by its name that forall denotes a logical universal quantifier. In any case, hsql-1.7/Database/HSQL/Types.hs uses forall at line #134. I got a nasty build so I added {-# LANGUAGE ExistentialQuantification #-} at the top of the module. Now I get the following a coupleof lines up: Database/HSQL/Types.hs:131:5: Illegal polymorphic or qualified type: forall a. Int - FieldDef - FieldDef - CString - Int - IO a - IO a In the definition of data constructor `Statement' In the data type declaration for `Statement' If seems that GHC doesn't like a. Why? Kind regards, Vasili ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] use of the GHC universal quantifier
Hello, It seems to me by its name that forall denotes a logical universal quantifier. In any case, hsql-1.7/Database/HSQL/Types.hs uses forall at line #134. I got a nasty build so I added {-# LANGUAGE ExistentialQuantification #-} at the top of the module. Now I get the following a coupleof lines up: Database/HSQL/Types.hs:131:5: Illegal polymorphic or qualified type: forall a. Int - FieldDef - FieldDef - CString - Int - IO a - IO a In the definition of data constructor `Statement' In the data type declaration for `Statement' If seems that GHC doesn't like a. Why? Kind regards, Vasili ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe