Class: Functor

Inherits:
Object show all
Defined in:
lib/carat/functor.rb

Overview

Functor

By definition a Functor is simply a first class method, but these are common in the form of Method and Proc. So here a Functor is a bit more specialied as a 1st class metafunction. Essentally, a Functor can vary its behavior accorrding to the operation applied to it.

Synopsis

require 'carat/functor'

f = Functor.new { |op, x| x.send(op, x) }
f + 1  #=> 2
f + 2  #=> 4
f + 3  #=> 6
f * 1  #=> 1
f * 2  #=> 2
f * 3  #=> 9

Notes

It would probably be a little better if we had a kernelless base object class. Built-in public Object methods will not work in a Functor b/c of this. Or perhaps this can improved via delegation.

History

  • 2005-04-11 Passed basic tests.

Instance Method Summary collapse

Constructor Details

#initialize(&func) ⇒ Functor

Returns a new instance of Functor.



35
36
37
# File 'lib/carat/functor.rb', line 35

def initialize(&func)
  @func = func
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(op, *args) ⇒ Object



38
39
40
# File 'lib/carat/functor.rb', line 38

def method_missing(op, *args)
  @func.call(op, *args)
end