
Thanks all of you.
So there is no trick that can make extensible records O(1) for field
access, like the native haskell records?. I didn´t know that all the
extensible records have O(n) or O(log n) at most.
That is not better than my State monad with a Data.Map. It is not possible
to use HList-like records like the one that Adam mentioned since the type
signature must not change when a new field is added.
2015-05-05 22:20 GMT+02:00 Marcin Mrotek
Hello,
I'm not sure if this is what you're looking for, but vinyl + lens state monad combinators let you write something like this:
foo :: State (Rec Foo [B,C,F]) Bar foo = ...
bar = State (Rec Foo [A,B,C,D,E,F] bar = do ... x <- zoom rsubset foo ... rlens SA .= 3 ...
Unfortunately Vinyl has O(n) lookup (unless it gets optimized away by sufficiently glorious haskell compiler, I guess, but I have no idea whether it actually can happen). But I'm not sure if the speed impact is noticeable, compared to using monad transformer stacks, for example.
http://hackage.haskell.org/package/vinyl http://hackage.haskell.org/package/vinyl-0.5.1/docs/Data-Vinyl-Lens.html http://hackage.haskell.org/package/lens
https://www.fpcomplete.com/school/to-infinity-and-beyond/pick-of-the-week/a-...
Best regards, Marcin Mrotek
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
-- Alberto.