Document functors
This commit is contained in:
		
							parent
							
								
									997defa166
								
							
						
					
					
						commit
						3d604ac88c
					
				
					 1 changed files with 18 additions and 0 deletions
				
			
		| 
						 | 
					@ -196,6 +196,24 @@ in concat { x = "foo"; y = "bar"; }</programlisting>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</para>
 | 
					</para>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<para>A set that has a <literal>__functor</literal> attribute whose value
 | 
				
			||||||
 | 
					is callable (i.e. is itself a function or a set with a
 | 
				
			||||||
 | 
					<literal>__functor</literal> attribute whose value is callable) can be
 | 
				
			||||||
 | 
					applied as if it were a function, with the set itself passed in first
 | 
				
			||||||
 | 
					, e.g.,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<programlisting>
 | 
				
			||||||
 | 
					let add = { __functor = self: x: x + self.x; };
 | 
				
			||||||
 | 
					    inc = add // { x = 1; };
 | 
				
			||||||
 | 
					in inc 1
 | 
				
			||||||
 | 
					</programlisting>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					evaluates to <literal>2</literal>. This can be used to attach metadata to a
 | 
				
			||||||
 | 
					function without the caller needing to treat it specially, or to implement
 | 
				
			||||||
 | 
					a form of object-oriented programming, for example.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</para>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</simplesect>
 | 
					</simplesect>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue