X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=methods.top.tex;fp=methods.top.tex;h=e6b758079569905677b7fc593da7f5223019f7e2;hb=c7fa2f10a5c049e2ae70405630857c7873778899;hp=ec330c92f29cf132aa1232aebd6d6c2045ba6056;hpb=f51f8bb08edd8fb7cd0be5ba3955ad9e27cfdbe1;p=msc-thesis1617.git diff --git a/methods.top.tex b/methods.top.tex index ec330c9..e6b7580 100644 --- a/methods.top.tex +++ b/methods.top.tex @@ -161,25 +161,26 @@ sharedStore :: String a -> Shared a | JSONEncode{|*|}, JSONDecode{|*|} resources in the outside world. Sometimes, an update action only updates a part of the resource. When this happens, all waiting \glspl{Task} looking at the resource are notified of the update. However, it may be the case that -\glspl{Task} where only looking at parts of the structure that was not updated. +\glspl{Task} were only looking at parts of the structure that was not updated. To solve this problem, parametric lenses were introduced~\cite{domoszlai_parametric_2014}. Parametric lenses add a type variable to the \gls{SDS} that is in the current -library functions fixed to \CI{()}. When a \gls{SDS} executes a write -operation it also provides the system with a notification predicate. This -notification predicate is a function \CI{p -> Bool} where \CI{p} is the -parametric lens type. This allows programmers to create a big share, and have -\glspl{Task} only look at parts of the big share. This technique is used in the -current system in memory shares. The \CI{IWorld} contains a map that is -accessible through an \gls{SDS}. While all data is stored in the map, only -\glspl{Task} looking at a specific entry are notified when the structure is -updated. The type of the parametric lens is the key in the map. +library functions fixed to the void type (i.e. \CI{()}). When a \gls{SDS} +executes a write operation, it also provides the system with a notification +predicate. This notification predicate is a function \CI{p -> Bool} where +\CI{p} is the parametric lens type. This allows programmers to create a big +share, and have \glspl{Task} only look at parts of the big share. This +technique is used in the current system in memory shares. The \CI{IWorld} +contains a map that is accessible through an \gls{SDS}. While all data is +stored in the map, only \glspl{Task} looking at a specific entry are notified +when the structure is updated. The type of the parametric lens is the key in +the map. Functionality for setting parameters is added in the system. The most important function is the \CI{sdsFocus} function. This function is listed in Listing~\ref{lst:focus} and allows the programmer to fix the parametric lens to -a value. +a specific value. \begin{lstlisting}[label={lst:focus}, caption={Parametric lens functions}]