On Fri, Jun 07, 2013 at 04:05:09PM -0400, Joe Q wrote: > The phantom parameter solves the same problem as scoped type variables. > Granted, if you find yourself in that kind of polymorphic soup you have > deeper problems...
I don't understand this. Scoped type variables are used when you want to use a type variable from the top level within the body of a function. If you use "op" and specify a particular constructor then you don't have a variable but a concrete instance of a type. But maybe I'm missing some more powerful way this can be used ... Tom > On Jun 7, 2013 2:53 PM, "Tom Ellis" > <tom-lists-haskell-cafe-2...@jaguarpaw.co.uk> wrote: > > On Fri, Jun 07, 2013 at 07:08:19AM -0700, David Banas wrote: > > > op :: Newtype< > > http://hackage.haskell.org/packages/archive/newtype/0.2/doc/html/Control-Newtype.html#t:Newtype > > > > > > n > > > o => (o -> n) -> n -> > > > oSource< > > http://hackage.haskell.org/packages/archive/newtype/0.2/doc/html/src/Control-Newtype.html#op > > > > > > > > > This function serves two purposes: > > > > > > 1. Giving you the unpack of a newtype without you needing to remember > > > the name. > > > 2. Showing that the first parameter is *completely ignored* on the > > value > > > level, meaning the only reason you pass in the constructor is to > > provide > > > type information. Typeclasses sure are neat. > > > > > > As point #2, above, emphasizes, the only purpose for the first argument > > to > > > the function (i.e. - the constructor "(o -> n)") is to specify the type > > of > > > 'n'. However, being a *newtype*, 'n' can have only one constructor. So, > > why > > > is it necessary to pass in the constructor to this function, when we're > > > already passing in 'n'? > > > > I am puzzled by this too. > > > > What does "op" stand for? I hypothesis "opposite" in the sense of inverse, > > since as Roman points out "op Constructor :: n -> o" is the inverse of > > "Constructor :: o -> n". > > > > But I admit I do not see how this provides value over "unpack" itself. > > > > Tom > > > > _______________________________________________ > > 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 mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe