Module: Functions::PreludeMeta::ClassMethods

Included in:
Functions::PreludeMeta
Defined in:
lib/functions/prelude_meta.rb

Instance Method Summary collapse

Instance Method Details

#after(c, f, g) ⇒ Object

alias :def_compose :compose



52
53
54
# File 'lib/functions/prelude_meta.rb', line 52

def after(c, f, g)
  compose(c, g, f)
end

#compose(c, f, g) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/functions/prelude_meta.rb', line 39

def compose(c, f, g)
  m = create_proc_method(c, f, :f)
  n = create_proc_method(c, g, :g)
  code = %Q{
  def #{c}(x)
    #{m}(#{n}(x))
  end
}
  module_eval(code)
end

#create_proc_method(c, f, i = :f) ⇒ Object



11
12
13
14
15
16
17
18
# File 'lib/functions/prelude_meta.rb', line 11

def create_proc_method(c, f, i=:f)
  if Proc === f
    define_method("#{c}_#{i}_proc", f)
    return "#{c}_#{i}_proc"
  else
    return f
  end
end

#define(*params) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/functions/prelude_meta.rb', line 30

def define(*params)
  if Symbol === params[0]
    define_v1(*params)
  else
    name = params[0].delete(:as)
    define_v2(*params[0], name)
  end
end

#define_v1(c, definition) ⇒ Object



20
21
22
23
# File 'lib/functions/prelude_meta.rb', line 20

def define_v1(c, definition)
  key, value = definition[:as].first
  self.send(key, c, *value)
end

#define_v2(definition, name) ⇒ Object



25
26
27
28
# File 'lib/functions/prelude_meta.rb', line 25

def define_v2(definition, name)
  key, value = definition
  self.send(key, name, *value)
end

#filter(c, f) ⇒ Object

alias :def_map :map



131
132
133
134
135
136
137
138
139
# File 'lib/functions/prelude_meta.rb', line 131

def filter(c, f)
  m = create_proc_method(c, f)
  code = %Q{
  def #{c}(arr)
    arr.select { |x| #{m}(x) }
  end
}
  module_eval(code)
end

#foldl(c, f, i) ⇒ Object

alias :def_parallel :parallel



71
72
73
74
75
76
77
78
79
# File 'lib/functions/prelude_meta.rb', line 71

def foldl(c, f, i)
  m = create_proc_method(c, f)
  code = %Q{
  def #{c}(arr)
    arr.inject(#{i}) { |r, x| #{m}(r,x) }
  end
}
  module_eval(code)
end

#foldr(c, f, i) ⇒ Object

alias :def_reduce_left :reduce_left



95
96
97
98
99
100
101
102
103
# File 'lib/functions/prelude_meta.rb', line 95

def foldr(c, f, i)
  m = create_proc_method(c, f)
  code = %Q{
  def #{c}(arr)
    arr.reverse.inject(#{i}) { |r, x| #{m}(r,x) }
  end
}
  module_eval(code)
end

#map(c, f) ⇒ Object

alias :def_reduce_right :reduce_right



119
120
121
122
123
124
125
126
127
# File 'lib/functions/prelude_meta.rb', line 119

def map(c, f)
  m = create_proc_method(c, f)
  code = %Q{
  def #{c}(arr)
    arr.map { |x| #{m}(x) }
  end
}
  module_eval(code)
end

#method(m) ⇒ Object Also known as: def_method

alias :def_filter :filter



143
144
145
146
147
148
149
150
# File 'lib/functions/prelude_meta.rb', line 143

def method(m)
  code = %Q{
  def #{m}(o)
    o.#{m}
  end
}
  module_eval(code)
end

#parallel(c, f, g) ⇒ Object

alias :def_after :after



58
59
60
61
62
63
64
65
66
67
# File 'lib/functions/prelude_meta.rb', line 58

def parallel(c, f, g)
  m = create_proc_method(c, f, :f)
  n = create_proc_method(c, g, :g)
  code = %Q{
  def #{c}(x)
    [#{m}(x),#{n}(x)]
  end
}
  module_eval(code)
end

#reduce_left(c, f) ⇒ Object

alias :def_foldl :foldl



83
84
85
86
87
88
89
90
91
# File 'lib/functions/prelude_meta.rb', line 83

def reduce_left(c, f)
  m = create_proc_method(c, f)
  code = %Q{
  def #{c}(arr)
    arr.inject { |r, x| #{m}(r,x) }
  end
}
  module_eval(code)
end

#reduce_right(c, f) ⇒ Object

alias :def_foldr :foldr



107
108
109
110
111
112
113
114
115
# File 'lib/functions/prelude_meta.rb', line 107

def reduce_right(c, f)
  m = create_proc_method(c, f)
  code = %Q{
  def #{c}(arr)
    arr.reverse.inject { |r, x| #{m}(r,x) }
  end
}
  module_eval(code)
end