Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://www.haskell.org/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Re: a bunch o' questions (Brandon S Allbery KF8NH) 2. Re: a bunch o' questions (matthew coolbeth) 3. Re: a bunch o' questions (Brandon S Allbery KF8NH) 4. Re: a bunch o' questions (Daniel Fischer) 5. functor declaration (Michael Mossey) 6. Re: functor declaration (Isaac Dupree) 7. Re: functor declaration (Daniel Fischer) 8. the role of assignments (prad) 9. Re: the role of assignments (Jordan Cooper) ---------------------------------------------------------------------- Message: 1 Date: Thu, 01 Jul 2010 13:56:54 -0400 From: Brandon S Allbery KF8NH <allb...@ece.cmu.edu> Subject: Re: [Haskell-beginners] a bunch o' questions To: beginners@haskell.org Message-ID: <4c2cd6e6.7020...@ece.cmu.edu> Content-Type: text/plain; charset=UTF-8 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 7/1/10 12:32 , Michael Mossey wrote: > Regarding (->): > > - Is (->) a type constructor parameterized by two types? > - Is (->) an operator? If so, it is the only operator that is also a type > constructor? Yes to both, at least in Haskell 98. - -- brandon s. allbery [linux,solaris,freebsd,perl] allb...@kf8nh.com system administrator [openafs,heimdal,too many hats] allb...@ece.cmu.edu electrical and computer engineering, carnegie mellon university KF8NH -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.10 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAkws1uYACgkQIn7hlCsL25WfzwCfe7KbeMhuPM6JFU2NIQAG3tps mA4AoNIZoKdvIO4eL7OkKwRmLtDhtSor =BwP/ -----END PGP SIGNATURE----- ------------------------------ Message: 2 Date: Thu, 1 Jul 2010 14:48:05 -0400 From: matthew coolbeth <mac01...@engr.uconn.edu> Subject: Re: [Haskell-beginners] a bunch o' questions To: Brandon S Allbery KF8NH <allb...@ece.cmu.edu> Cc: beginners@haskell.org Message-ID: <aanlktikvnxxmgpf1wezmwjsgtggne2y_sm6vf28kx...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" So, is it possible for me to define a parametric type with an infix binary data constructor? On Thu, Jul 1, 2010 at 13:56, Brandon S Allbery KF8NH <allb...@ece.cmu.edu>wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On 7/1/10 12:32 , Michael Mossey wrote: > > Regarding (->): > > > > - Is (->) a type constructor parameterized by two types? > > - Is (->) an operator? If so, it is the only operator that is also a > type > > constructor? > > Yes to both, at least in Haskell 98. > > - -- > brandon s. allbery [linux,solaris,freebsd,perl] allb...@kf8nh.com > system administrator [openafs,heimdal,too many hats] allb...@ece.cmu.edu > electrical and computer engineering, carnegie mellon university KF8NH > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v2.0.10 (Darwin) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ > > iEYEARECAAYFAkws1uYACgkQIn7hlCsL25WfzwCfe7KbeMhuPM6JFU2NIQAG3tps > mA4AoNIZoKdvIO4eL7OkKwRmLtDhtSor > =BwP/ > -----END PGP SIGNATURE----- > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://www.haskell.org/mailman/listinfo/beginners > -- mac -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/beginners/attachments/20100701/61a4c27e/attachment-0001.html ------------------------------ Message: 3 Date: Thu, 01 Jul 2010 15:00:08 -0400 From: Brandon S Allbery KF8NH <allb...@ece.cmu.edu> Subject: Re: [Haskell-beginners] a bunch o' questions To: matthew coolbeth <mac01...@engr.uconn.edu> Cc: beginners@haskell.org Message-ID: <4c2ce5b8.1060...@ece.cmu.edu> Content-Type: text/plain; charset=UTF-8 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 7/1/10 14:48 , matthew coolbeth wrote: > So, is it possible for me to define a parametric type with an infix binary > data constructor? With the appropriate extension, you can declare an infix type or data constructor using a symbol starting with `:': > data Listy a = Nil | a :*: Listy a http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/data-type-extensions.html#infix-tycons - -- brandon s. allbery [linux,solaris,freebsd,perl] allb...@kf8nh.com system administrator [openafs,heimdal,too many hats] allb...@ece.cmu.edu electrical and computer engineering, carnegie mellon university KF8NH -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.10 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAkws5bgACgkQIn7hlCsL25VhEACgxv82olCE0gdBxjRVx+1Gqvv2 nkgAn1UJ5dGCza6qfW+FK7POSOcFY96F =PT6o -----END PGP SIGNATURE----- ------------------------------ Message: 4 Date: Thu, 1 Jul 2010 21:31:52 +0200 From: Daniel Fischer <daniel.is.fisc...@web.de> Subject: Re: [Haskell-beginners] a bunch o' questions To: beginners@haskell.org, matthew coolbeth <mac01...@engr.uconn.edu> Message-ID: <201007012131.52263.daniel.is.fisc...@web.de> Content-Type: text/plain; charset="utf-8" On Thursday 01 July 2010 21:00:08, Brandon S Allbery KF8NH wrote: > On 7/1/10 14:48 , matthew coolbeth wrote: > > So, is it possible for me to define a parametric type with an infix > > binary data constructor? > > With the appropriate extension, you can declare an infix type or data To clarify: for infix data constructors, no extension is needed, they're in Haskell98. To define and infix type constructor, you need the TypeOperators language extension. > > constructor using a symbol starting with `:': > > data Listy a = Nil | a :*: Listy a ^ Haskell98 {-# LANGUAGE TypeOperators #-} data a :+: b = a :+: b deriving (Eq, Ord, Show) ^ not H98 > > http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/data-type-extens >ions.html#infix-tycons ------------------------------ Message: 5 Date: Thu, 01 Jul 2010 15:52:47 -0700 From: Michael Mossey <m...@alumni.caltech.edu> Subject: [Haskell-beginners] functor declaration To: beginners@haskell.org Message-ID: <4c2d1c3f.7040...@alumni.caltech.edu> Content-Type: text/plain; charset=ISO-8859-1; format=flowed in the declaration of Functor: class Functor f where fmap :: (a -> b) -> f a -> f b does the compiler infer that f is a type constructor (not a type) because of the appearance of "f a" and "f b"? What I'm thinking is that some classes are classes of types, not type constructors. Like class CanMakeInt a where makeInt :: a -> Int In this case a is a type, not a type constructor. But there is no difference in the form of the first line of the class declaration. Thanks, Mike ------------------------------ Message: 6 Date: Thu, 01 Jul 2010 19:13:39 -0400 From: Isaac Dupree <m...@isaac.cedarswampstudios.org> Subject: Re: [Haskell-beginners] functor declaration To: beginners@haskell.org Message-ID: <4c2d2123.1010...@isaac.cedarswampstudios.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed On 07/01/10 18:52, Michael Mossey wrote: > in the declaration of Functor: > > class Functor f where > fmap :: (a -> b) -> f a -> f b > > does the compiler infer that f is a type constructor (not a type) > because of the appearance of "f a" and "f b"? > > What I'm thinking is that some classes are classes of types, not type > constructors. Like > > class CanMakeInt a where > makeInt :: a -> Int > > In this case a is a type, not a type constructor. But there is no > difference in the form of the first line of the class declaration. You are entirely correct! The compiler infers this from the entire class declaration (or maybe it's the entire module). The fact that f is a type-constructor, or a type, or whatever: that's its "kind", and this process the compiler does is called "kind inference". Only rarely can the compiler not figure it out, in which case (per standard) it defaults to * (the 'kind' of ordinary types). (If you use an extension you can also specify kinds explicitly, IIRC, like class Functor (f :: * -> *) where ... ) ------------------------------ Message: 7 Date: Fri, 2 Jul 2010 01:28:20 +0200 From: Daniel Fischer <daniel.is.fisc...@web.de> Subject: Re: [Haskell-beginners] functor declaration To: beginners@haskell.org Message-ID: <201007020128.23757.daniel.is.fisc...@web.de> Content-Type: text/plain; charset="iso-8859-1" On Friday 02 July 2010 00:52:47, Michael Mossey wrote: > in the declaration of Functor: > > class Functor f where > fmap :: (a -> b) -> f a -> f b > > does the compiler infer that f is a type constructor (not a type) > because of the appearance of "f a" and "f b"? Yes. The compiler infers the kind of f from the signature of fmap. Specifically, it infers that f must be a unary type constructor of kind (* -> *). * is the kind of types (or nullary type constructors). Since a and b appear as arguments of (->), the compiler infers that a and b both have kind *. Later, f a and f b appear as arguments of (->), so f a and f b also must have kind *, which means that f has kind * -> * (f takes one argument which is a type and produces a type). > > What I'm thinking is that some classes are classes of types, not type > constructors. Like > > class CanMakeInt a where > makeInt :: a -> Int > > In this case a is a type, not a type constructor. But there is no > difference in the form of the first line of the class declaration. Right. But the compiler takes the methods of the class and their signatures into account, which usually determine the kind of the class parameter (if not, well...). Here, a is an argument of (->), hence a must have kind *, i.e. be a type. > > Thanks, > Mike ------------------------------ Message: 8 Date: Thu, 1 Jul 2010 16:59:35 -0700 From: prad <p...@towardsfreedom.com> Subject: [Haskell-beginners] the role of assignments To: haskellbeginners <beginners@haskell.org> Message-ID: <20100701165935.6bd4e...@gom> Content-Type: text/plain; charset=US-ASCII i'm trying to sort the assignment concept out in my mind. as i understand it so far, <- is for IO so you can do something like someIOVar <- readFile filename this will be of type IO String which is different from String as in let someStrVar = "this is a string" to work with an IO String you need to convert it into a String which seems to automatically happen inside a do structure as in: main = do tmplX <- readFile "zztmpl.htm" navbx <- readFile "zznavb.htm" let page = U.replace tmplX "NAVX" navbx are there some other ways to make IO String into String? also, it seems that assignment is different for the '=' in a program vs ghci for functions: sum x y = x + y (program) vs let sum x y = x + y (ghci) but not for strings and other things because you must always preface assignment of values with 'let': let a = 4 i suppose the let is there for variable assignments because such things necessitate a change of state and i've read that this is not desirable in functional programming - you have to work a little harder to do assignment than languages which just allow a = 4 b = 5 c = 6 etc in haskell, is it preferable to do something like this: var <- readFile fn someFunction var or someFunction (readFile fn) -- In friendship, prad ... with you on your journey Towards Freedom http://www.towardsfreedom.com (website) Information, Inspiration, Imagination - truly a site for soaring I's ------------------------------ Message: 9 Date: Thu, 1 Jul 2010 17:04:21 -0700 From: Jordan Cooper <nefi...@gmail.com> Subject: Re: [Haskell-beginners] the role of assignments To: prad <p...@towardsfreedom.com> Cc: beginners <beginners@haskell.org> Message-ID: <aanlktimhen2ajcwtiz6kkjufeuonvl_2bkzblclrz...@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 <- isn't just for IO; it's part of "do" notation's syntactic sugar. It is actually (in your first example) passing the unwrapped result (String; not IO String) of ``readFile filename" to an anonymous function. I'd recommend reading ch. 14 of Real World Haskell ( http://book.realworldhaskell.org/read/monads.html ) On 7/1/10, prad <p...@towardsfreedom.com> wrote: > i'm trying to sort the assignment concept out in my mind. > as i understand it so far, > > <- is for IO > so you can do something like > someIOVar <- readFile filename > this will be of type IO String > > which is different from String as in > > let someStrVar = "this is a string" > > to work with an IO String you need to convert it into a String which > seems to automatically happen inside a do structure as in: > > main = do > tmplX <- readFile "zztmpl.htm" > navbx <- readFile "zznavb.htm" > let page = U.replace tmplX "NAVX" navbx > > are there some other ways to make IO String into String? > > > > also, it seems that assignment is different for the '=' in a program vs > ghci for functions: > > sum x y = x + y (program) > vs > let sum x y = x + y (ghci) > > but not for strings and other things because you must always preface > assignment of values with 'let': > > let a = 4 > > i suppose the let is there for variable assignments because such things > necessitate a change of state and i've read that this is not desirable > in functional programming - you have to work a little harder to do > assignment than languages which just allow > a = 4 > b = 5 > c = 6 > etc > > in haskell, is it preferable to do something like this: > > var <- readFile fn > someFunction var > > or someFunction (readFile fn) > > > -- > In friendship, > prad > > ... with you on your journey > Towards Freedom > http://www.towardsfreedom.com (website) > Information, Inspiration, Imagination - truly a site for soaring I's > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://www.haskell.org/mailman/listinfo/beginners > ------------------------------ _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners End of Beginners Digest, Vol 25, Issue 3 ****************************************