I think that the whole point of extensible records is to change the type on appending, to provide more safety at compile time than (hash) maps. If you don't want to use lenses (zoom) to combine different state monads, I guess a map is the best option.
Kind regards,
Marcin Mrotek
-----Wiadomość oryginalna-----
Od: "Alberto G. Corona "
Wysłano: 2015-05-05 23:03
Do: "Marcin Mrotek"
DW: "adam vogt" ; "haskell-cafe"
Temat: Re: [Haskell-cafe] Extensible states
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.