daitai 0.1.11 → 0.1.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4d7a78ce4623b81bdf05b5be7c7aee152f89e81db2e11b494cc391bf5636d5c5
4
- data.tar.gz: 7dcac48058a84d36295f62f9ada59010eb090f9fcf8cbbbfc680d48201934b7e
3
+ metadata.gz: 1939017ecba29ca4fe6e6ee9a5773e51453a236b9fc688a8a90418f7317958db
4
+ data.tar.gz: a1d08cbcac87cfd8689652a391380e7b857c7a617aca0edcb2a3b8dee79e56d3
5
5
  SHA512:
6
- metadata.gz: c35c2a5feb0824759caf918bfce02401e247f55036784e8870dbb68829c6e0dd253cf36a66962ddd1d06a0de2e8ecf04c4b86c77411bb84f695db6ca2fcadfd1
7
- data.tar.gz: 98589d176b0a5acdbc6dd21956056e155ff6cfb584d94f2745f09f89b6dbcbb0d0c2093b30a941114a2638cd0bf3a05c7376ff663818a9c16669f979f0eeada6
6
+ metadata.gz: 3d1a1b81055ddebb8ad11e8fef26f168c4c16074066a2b26d51fcccd1c4df17ab9e76d1959392dd119b8ce71cb733080cf42081b90185d534832c8dbec25ad3c
7
+ data.tar.gz: 2fc218befeb82b84827a1dd303679fa238bd758125d4ba080838bcd30b0a899512cd00675ad16091d64127712042aa975f15ce075f0777e6af5ddf4180b72ece
@@ -7,4 +7,6 @@ rvm:
7
7
  - 2.4.3
8
8
  - 2.5.0
9
9
  - ruby-head
10
- before_install: gem install bundler -v 1.16.1
10
+ before_install:
11
+ - gem update --system
12
+ - gem install bundler -v 1.16.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- daitai (0.1.11)
4
+ daitai (0.1.12)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -40,8 +40,11 @@ $ gem install daitai
40
40
  * [comparator](#comparator-definition)
41
41
  * [compose](#compose-definition)
42
42
  * [concat](#concat-definition)
43
+ * [cond](#cond-definition)
43
44
  * [dec](#dec-definition)
44
45
  * [divide](#divide-definition)
46
+ * [equals](#equals-definition)
47
+ * [false](#false-definition)
45
48
  * [filter](#filter-definition)
46
49
  * [flip](#flip-definition)
47
50
  * [head](#head-definition)
@@ -75,6 +78,7 @@ $ gem install daitai
75
78
  * [sum](#sum-definition)
76
79
  * [tail](#tail-definition)
77
80
  * [tap](#tap-definition)
81
+ * [true](#true-definition)
78
82
  * [xor](#xor-definition)
79
83
 
80
84
  - - -
@@ -209,6 +213,26 @@ Daitai.concat.("Szcz", "ecin") # => "Szczecin"
209
213
 
210
214
  - - -
211
215
 
216
+ <h4 id='cond-definition'>
217
+ <code>cond :: [[(*… → Bool), (*… → *)]] → (*… → *)</code>
218
+ </h4>
219
+
220
+ Takes a list of pairs consisted of a predicate and a transformer and returns a function which finds the first passing predicate and evaluates the corresponding transformer. Returns a `nil` if there is no matching predicate.
221
+
222
+ ```ruby
223
+ function = Daitai.cond.(
224
+ [Daitai.is.(String), Daitai.always.("It's a String!")],
225
+ [Daitai.is.(Symbol), Daitai.always.("It's a Symbol!")],
226
+ [Daitai.true, ->(unknown) { "I don't know what #{unknown} is."}]
227
+ )
228
+
229
+ function.("いただきます") # => "It's a String!"
230
+ function.(:env) # => "It's a Symbol!"
231
+ function.(3.14) # => "I don't know what 3.14 is."
232
+ ```
233
+
234
+ - - -
235
+
212
236
  <h4 id='dec-definition'>
213
237
  <code>dec :: Numeric -> Numeric</code>
214
238
  </h4>
@@ -233,6 +257,33 @@ Daitai.divide.(18, 6) # => 3
233
257
 
234
258
  - - -
235
259
 
260
+ <h4 id='equals-definition'>
261
+ <code>equals :: a -> b -> Bool</code>
262
+ </h4>
263
+
264
+ Returns `true` if both arguments are equal. Otherwise returns `false`.
265
+
266
+ ```ruby
267
+ Daitai.equals.(7, 7) # => true
268
+ Daitai.equals.('7', 7) # => false
269
+ Daitai.equals.(%w[a b c], %w[a b c]) # => true
270
+ ```
271
+
272
+ - - -
273
+
274
+ <h4 id='false-definition'>
275
+ <code>false :: * -> Bool</code>
276
+ </h4>
277
+
278
+ Returns a function that ignores all arguments and always returns `false`.
279
+
280
+ ```ruby
281
+ Daitai.false.() # => false
282
+ Daitai.false.(1, 2, 3) # => false
283
+ ```
284
+
285
+ - - -
286
+
236
287
  <h4 id='filter-definition'>
237
288
  <code>filter :: (a -> Bool) -> [a] -> [a]</code>
238
289
  </h4>
@@ -708,6 +759,19 @@ Daitai.tap.(logger, 7)
708
759
 
709
760
  - - -
710
761
 
762
+ <h4 id='true-definition'>
763
+ <code>true :: * → Bool</code>
764
+ </h4>
765
+
766
+ Returns a function that ignores all arguments and always returns `true`.
767
+
768
+ ```ruby
769
+ Daitai.true.() # => true
770
+ Daitai.true.(1, 2, 3) # => true
771
+ ```
772
+
773
+ - - -
774
+
711
775
  <h4 id='xor-definition'>
712
776
  <code>xor :: Bool -> Bool -> Bool</code>
713
777
  </h4>
@@ -14,8 +14,11 @@ module Daitai
14
14
  extend Comparator
15
15
  extend Compose
16
16
  extend Concat
17
+ extend Cond
17
18
  extend Dec
18
19
  extend Divide
20
+ extend Equals
21
+ extend False
19
22
  extend Filter
20
23
  extend Flip
21
24
  extend Head
@@ -49,5 +52,6 @@ module Daitai
49
52
  extend Sum
50
53
  extend Tail
51
54
  extend Tap
55
+ extend True
52
56
  extend Xor
53
57
  end
@@ -4,13 +4,13 @@ module Daitai
4
4
  module Comparator
5
5
  def comparator
6
6
  lambda do |predicate|
7
- ->(a, b) { evaluate(predicate, a, b) }
7
+ ->(a, b) { evaluate_comparator(predicate, a, b) }
8
8
  end
9
9
  end
10
10
 
11
11
  private
12
12
 
13
- def evaluate(predicate, a, b)
13
+ def evaluate_comparator(predicate, a, b)
14
14
  return -1 if predicate.(a, b)
15
15
  return 1 if predicate.(b, a)
16
16
  0
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Daitai
4
+ module Cond
5
+ def cond
6
+ ->(*pairs) { evaluate_cond(pairs) }
7
+ end
8
+
9
+ private
10
+
11
+ def evaluate_cond(pairs)
12
+ lambda do |*arguments|
13
+ result = nil
14
+
15
+ pairs.each do |(predicate, transformer)|
16
+ break result = transformer.(*arguments) if predicate.(*arguments)
17
+ end
18
+
19
+ result
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Daitai
4
+ module Equals
5
+ def equals
6
+ lambda do |a, b|
7
+ a == b
8
+ end.curry
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Daitai
4
+ module False
5
+ def false
6
+ always.(false)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Daitai
4
+ module True
5
+ def true
6
+ always.(true)
7
+ end
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Daitai
4
- VERSION = '0.1.11'
4
+ VERSION = '0.1.12'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daitai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Walerian Sobczak
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-12 00:00:00.000000000 Z
11
+ date: 2018-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -95,8 +95,11 @@ files:
95
95
  - lib/daitai/functions/comparator.rb
96
96
  - lib/daitai/functions/compose.rb
97
97
  - lib/daitai/functions/concat.rb
98
+ - lib/daitai/functions/cond.rb
98
99
  - lib/daitai/functions/dec.rb
99
100
  - lib/daitai/functions/divide.rb
101
+ - lib/daitai/functions/equals.rb
102
+ - lib/daitai/functions/false.rb
100
103
  - lib/daitai/functions/filter.rb
101
104
  - lib/daitai/functions/flip.rb
102
105
  - lib/daitai/functions/head.rb
@@ -130,6 +133,7 @@ files:
130
133
  - lib/daitai/functions/sum.rb
131
134
  - lib/daitai/functions/tail.rb
132
135
  - lib/daitai/functions/tap.rb
136
+ - lib/daitai/functions/true.rb
133
137
  - lib/daitai/functions/xor.rb
134
138
  - lib/daitai/version.rb
135
139
  homepage: https://github.com/walerian777/daitai