Module GapiLens
Functional lenses.
Based on F# implementation in FSharpx (see src/FSharpx.Core/Lens.fs for the original implementation)
- see http://bugsquash.blogspot.com/2011/11/lenses-in-f.html
Lenses in F#
- see http://stackoverflow.com/questions/8179485/updating-nested-immutable-data-structures
Stackoverflow question about Updating nested immutable data structures
- see http://stackoverflow.com/questions/5767129/lenses-fclabels-data-accessor-which-library-for-structure-access-and-mutatio
Haskell libraries for structure access and mutation
- see http://www.youtube.com/watch?v=efv0SQNde5Q
Functional lenses for Scala by Edward Kmett on YouTube
- see http://patternsinfp.wordpress.com/2011/01/31/lenses-are-the-coalgebras-for-the-costate-comonad/
Lenses are the coalgebras for the costate comonad by Jeremy Gibbons
type ('a, 'b) t
=
{
get : 'a -> 'b;
Functional getter
set : 'b -> 'a -> 'a;
Functional setter
}
Lens type definition
val modify : ('a, 'b) t -> ('b -> 'b) -> 'a -> 'a
Updates a value through a lens
Combinators
State monad integration
val get_state : ('a, 'b) t -> 'a -> 'b * 'a
Gets a value from the state monad.
val put_state : ('a, 'b) t -> 'b -> 'a -> unit * 'a
Puts a value in the state monad.
val modify_state : ('a, 'b) t -> ('b -> 'b) -> 'a -> unit * 'a
Modifies a value in the state monad.
Stock lenses
val ignore : ('a, unit) t
Trivial lens
val id : ('a, 'a) t
Identity lens
val first : ('a * 'b, 'a) t
Gets/sets the first element in a pair
val second : ('a * 'b, 'b) t
Gets/sets the second element in a pair
val head : ('a list, 'a) t
Gets/sets the first element in a list
val tail : ('a list, 'a list) t
Gets/sets the tail of a list
val for_hash : 'a -> (('a, 'b) Stdlib.Hashtbl.t, 'b option) t
Lens for a particular key in a hashtable
val for_assoc : 'a -> (('a * 'b) list, 'b option) t
Lens for a particular key in an associative list
val for_array : int -> ('a array, 'a) t
Lens for a particular position in an array
val for_list : int -> ('a list, 'a) t
Lens for a particular position in a list
val option_get : ('a option, 'a) t
Lens for extracting the value from an option type (same as Option.get)
List combinators
Isomorphism
val xmap : ('a -> 'b) -> ('b -> 'a) -> ('c, 'a) t -> ('c, 'b) t
Applies an isomorphism to the value viewed through a lens
module Infix : sig ... end
Infix operators
module StateInfix : sig ... end
Infix operators for the state monad