On Fri, May 10, 2013 at 3:31 PM, Leon Smith <leon.p.sm...@gmail.com> wrote:
> On Fri, May 10, 2013 at 5:49 PM, Alexander Solla <alex.so...@gmail.com>wrote: > >> I'm not sure if it would work for your case, but have you considered >> using DataKinds instead of phantom types? At least, it seems like it would >> be cheap to try out. >> >> >> http://www.haskell.org/ghc/docs/7.4.2/html/users_guide/kind-polymorphism-and-promotion.html >> > > I do like DataKinds a lot, and I did think about them a little bit with > respect to this problem, but a solution isn't obvious to me, and perhaps > more importantly I'd like to be able to support older versions of GHC, > probably back to 7.0 at least. > > The issue is that every call to init needs to return a slightly different > type, and whether this is achieved via phantom types or datakinds, it > seems to me some form of existential typing is required. As both Andres > and MigMit pointed out, you can sort of achieve this by using a > continuation-like construction and higher-ranked types (is there a name for > this transform? I've seen it a number of times and it is pretty well > known...), but this enforces a dynamic extent on the descriptor whereas > the original interface I proposed allows an indefinite extent. > I know what extensions (of predicates and the like) are, but what exactly does "dynamic" and "indefinite" mean in this context?
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe