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

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 <marcin.jan.mrotek@gmail.com>:
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.


Best regards,
Marcin Mrotek

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe




--
Alberto.