monad-maybe 0.9.9 → 0.9.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.ruby-version +1 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +53 -10
- data/VERSION +1 -1
- data/lib/monad/maybe.rb +37 -14
- data/lib/monad/maybe/base.rb +0 -3
- data/lib/monad/maybe/just.rb +1 -1
- data/lib/monad/maybe/list.rb +3 -1
- data/lib/monad/maybe/nothing.rb +2 -2
- data/monad-maybe.gemspec +23 -21
- data/test/maybe.rb +6 -1
- metadata +16 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e2cf6c871f826aa0729c79f78d1edc9465f0fe0
|
4
|
+
data.tar.gz: bb2c9d46f3f2a4f06cb7a8b1ef23cc6949e8fb05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3648bb2d0b72766700ed3630ed247c390528391ce6462cfc5b34c7997fa47cd489ce6b950b5b63be1763cefb765cc9b597372616ac5d85d51dc41e496dbdd48
|
7
|
+
data.tar.gz: 894847248795c75271ddb62781000bcc840670997ee152891e3f71fb35e0bf212190837a8bfbaf4405d2ef05dff81c9749c12cbd114a353a519f5e33da3d1fad
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.4.1
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,24 +1,67 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
addressable (2.4.0)
|
5
|
+
builder (3.2.3)
|
6
|
+
descendants_tracker (0.0.4)
|
7
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
8
|
+
faraday (0.9.2)
|
9
|
+
multipart-post (>= 1.2, < 3)
|
10
|
+
git (1.5.0)
|
11
|
+
github_api (0.16.0)
|
12
|
+
addressable (~> 2.4.0)
|
13
|
+
descendants_tracker (~> 0.0.4)
|
14
|
+
faraday (~> 0.8, < 0.10)
|
15
|
+
hashie (>= 3.4)
|
16
|
+
mime-types (>= 1.16, < 3.0)
|
17
|
+
oauth2 (~> 1.0)
|
18
|
+
hashie (3.6.0)
|
19
|
+
highline (2.0.0)
|
20
|
+
jeweler (2.3.9)
|
21
|
+
builder
|
22
|
+
bundler
|
7
23
|
git (>= 1.2.5)
|
24
|
+
github_api (~> 0.16.0)
|
25
|
+
highline (>= 1.6.15)
|
26
|
+
nokogiri (>= 1.5.10)
|
27
|
+
psych
|
8
28
|
rake
|
9
29
|
rdoc
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
30
|
+
semver2
|
31
|
+
jwt (2.1.0)
|
32
|
+
mime-types (2.99.3)
|
33
|
+
mini_portile2 (2.3.0)
|
34
|
+
multi_json (1.13.1)
|
35
|
+
multi_xml (0.6.0)
|
36
|
+
multipart-post (2.0.0)
|
37
|
+
nokogiri (1.8.5)
|
38
|
+
mini_portile2 (~> 2.3.0)
|
39
|
+
nokogiri (1.8.5-x86-mingw32)
|
40
|
+
mini_portile2 (~> 2.3.0)
|
41
|
+
oauth2 (1.4.1)
|
42
|
+
faraday (>= 0.8, < 0.16.0)
|
43
|
+
jwt (>= 1.0, < 3.0)
|
44
|
+
multi_json (~> 1.3)
|
45
|
+
multi_xml (~> 0.5)
|
46
|
+
rack (>= 1.2, < 3)
|
47
|
+
psych (3.0.3)
|
48
|
+
psych (3.0.3-x86-mingw32)
|
49
|
+
rack (2.0.6)
|
50
|
+
rake (12.3.1)
|
51
|
+
rdoc (6.0.4)
|
52
|
+
semver2 (3.4.2)
|
14
53
|
test-unit (2.5.5)
|
15
|
-
|
54
|
+
thread_safe (0.3.6)
|
55
|
+
yard (0.9.16)
|
16
56
|
|
17
57
|
PLATFORMS
|
18
58
|
ruby
|
19
59
|
x86-mingw32
|
20
60
|
|
21
61
|
DEPENDENCIES
|
22
|
-
jeweler
|
62
|
+
jeweler (~> 2.3.9)
|
23
63
|
test-unit
|
24
|
-
yard
|
64
|
+
yard (>= 0.9.11)
|
65
|
+
|
66
|
+
BUNDLED WITH
|
67
|
+
1.17.1
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.11
|
data/lib/monad/maybe.rb
CHANGED
@@ -14,21 +14,9 @@ end
|
|
14
14
|
|
15
15
|
class Object
|
16
16
|
def to_maybe(&blk)
|
17
|
-
j = Monad::Maybe
|
17
|
+
j = Monad::Maybe.return(self)
|
18
18
|
blk ? j.maybe(&blk) : j
|
19
19
|
end
|
20
|
-
|
21
|
-
def maybe?
|
22
|
-
false
|
23
|
-
end
|
24
|
-
|
25
|
-
def just?
|
26
|
-
false
|
27
|
-
end
|
28
|
-
|
29
|
-
def nothing?
|
30
|
-
false
|
31
|
-
end
|
32
20
|
end
|
33
21
|
|
34
22
|
class NilClass
|
@@ -40,11 +28,17 @@ end
|
|
40
28
|
module Monad
|
41
29
|
module Maybe
|
42
30
|
def self.return(obj)
|
43
|
-
obj.
|
31
|
+
if obj.nil? or nothing? obj
|
32
|
+
Monad::Maybe::Nothing.instance
|
33
|
+
else
|
34
|
+
Monad::Maybe::Just.new(obj)
|
35
|
+
end
|
44
36
|
end
|
45
37
|
end
|
46
38
|
end
|
47
39
|
|
40
|
+
# some toplevel methods
|
41
|
+
|
48
42
|
def maybe(obj, &blk)
|
49
43
|
m = Monad::Maybe.return(obj)
|
50
44
|
blk ? m.maybe(&blk) : m
|
@@ -57,3 +51,32 @@ end
|
|
57
51
|
def nothing
|
58
52
|
Monad::Maybe::Nothing.instance
|
59
53
|
end
|
54
|
+
|
55
|
+
module Kernel
|
56
|
+
def maybe?(x=nil)
|
57
|
+
return false if x.nil? # we assume it's being called as a method on an object like 0.maybe?
|
58
|
+
if not x.is_a? Monad::Maybe::Base
|
59
|
+
false
|
60
|
+
else
|
61
|
+
true
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def just?(x=nil)
|
66
|
+
return false if x.nil? # we assume it's being called as a method on an object like 0.maybe?
|
67
|
+
if not x.is_a? Monad::Maybe::Just
|
68
|
+
false
|
69
|
+
else
|
70
|
+
true
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def nothing?(x)
|
75
|
+
return false if x.nil? # we assume it's being called as a method on an object like 0.maybe?
|
76
|
+
if x == Monad::Maybe::Nothing.instance
|
77
|
+
true
|
78
|
+
else
|
79
|
+
false
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
data/lib/monad/maybe/base.rb
CHANGED
data/lib/monad/maybe/just.rb
CHANGED
data/lib/monad/maybe/list.rb
CHANGED
@@ -3,12 +3,14 @@ module Monad
|
|
3
3
|
class List
|
4
4
|
include Enumerable
|
5
5
|
|
6
|
+
# TODO: add support for lazy evaluation
|
7
|
+
|
6
8
|
def initialize(enum)
|
7
9
|
@enum = enum.map { |v| v.maybe? ? v : v.to_maybe }
|
8
10
|
end
|
9
11
|
|
10
12
|
def inspect
|
11
|
-
"#{
|
13
|
+
"maybe_list(#{@enum.map(&:inspect).join(', ')})"
|
12
14
|
end
|
13
15
|
|
14
16
|
def maybe?
|
data/lib/monad/maybe/nothing.rb
CHANGED
data/monad-maybe.gemspec
CHANGED
@@ -2,20 +2,23 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: monad-maybe 0.9.11 ruby lib
|
5
6
|
|
6
7
|
Gem::Specification.new do |s|
|
7
|
-
s.name = "monad-maybe"
|
8
|
-
s.version = "0.9.
|
8
|
+
s.name = "monad-maybe".freeze
|
9
|
+
s.version = "0.9.11"
|
9
10
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.
|
12
|
-
s.
|
13
|
-
s.
|
14
|
-
s.
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib".freeze]
|
13
|
+
s.authors = ["Delon Newman".freeze]
|
14
|
+
s.date = "2018-11-06"
|
15
|
+
s.description = "This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way.".freeze
|
16
|
+
s.email = "delon.newman@gmail.com".freeze
|
15
17
|
s.extra_rdoc_files = [
|
16
18
|
"README.md"
|
17
19
|
]
|
18
20
|
s.files = [
|
21
|
+
".ruby-version",
|
19
22
|
"Gemfile",
|
20
23
|
"Gemfile.lock",
|
21
24
|
"README.md",
|
@@ -30,28 +33,27 @@ Gem::Specification.new do |s|
|
|
30
33
|
"monad-maybe.gemspec",
|
31
34
|
"test/maybe.rb"
|
32
35
|
]
|
33
|
-
s.homepage = "https://github.com/delonnewman/monad-maybe"
|
34
|
-
s.licenses = ["MIT"]
|
35
|
-
s.
|
36
|
-
s.
|
37
|
-
s.summary = "A Ruby implementation of Haskell's Maybe Monad"
|
36
|
+
s.homepage = "https://github.com/delonnewman/monad-maybe".freeze
|
37
|
+
s.licenses = ["MIT".freeze]
|
38
|
+
s.rubygems_version = "2.6.11".freeze
|
39
|
+
s.summary = "A Ruby implementation of Haskell's Maybe Monad".freeze
|
38
40
|
|
39
41
|
if s.respond_to? :specification_version then
|
40
42
|
s.specification_version = 4
|
41
43
|
|
42
44
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
43
|
-
s.add_development_dependency(%q<jeweler
|
44
|
-
s.add_development_dependency(%q<yard
|
45
|
-
s.add_development_dependency(%q<test-unit
|
45
|
+
s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
|
46
|
+
s.add_development_dependency(%q<yard>.freeze, [">= 0.9.11"])
|
47
|
+
s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
|
46
48
|
else
|
47
|
-
s.add_dependency(%q<jeweler
|
48
|
-
s.add_dependency(%q<yard
|
49
|
-
s.add_dependency(%q<test-unit
|
49
|
+
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
|
50
|
+
s.add_dependency(%q<yard>.freeze, [">= 0.9.11"])
|
51
|
+
s.add_dependency(%q<test-unit>.freeze, [">= 0"])
|
50
52
|
end
|
51
53
|
else
|
52
|
-
s.add_dependency(%q<jeweler
|
53
|
-
s.add_dependency(%q<yard
|
54
|
-
s.add_dependency(%q<test-unit
|
54
|
+
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
|
55
|
+
s.add_dependency(%q<yard>.freeze, [">= 0.9.11"])
|
56
|
+
s.add_dependency(%q<test-unit>.freeze, [">= 0"])
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
data/test/maybe.rb
CHANGED
@@ -105,7 +105,7 @@ class MaybeTest < Test::Unit::TestCase
|
|
105
105
|
assert_equal just(1), just(1).to_maybe
|
106
106
|
assert_equal nothing, nil.to_maybe
|
107
107
|
assert_equal nothing, nothing.to_maybe
|
108
|
-
assert_equal 1.to_maybe, [1].to_maybe
|
108
|
+
#assert_equal 1.to_maybe, [1].to_maybe this shouldn't be the case, why's this here?
|
109
109
|
assert_equal 0.to_maybe, (0..10).maybe_map { |n| n }.to_maybe
|
110
110
|
end
|
111
111
|
|
@@ -122,6 +122,11 @@ class MaybeTest < Test::Unit::TestCase
|
|
122
122
|
maybe(1).then(->(){ assert true }).then(->(){ assert true })
|
123
123
|
end
|
124
124
|
|
125
|
+
def test_unwrap
|
126
|
+
assert_equal maybe(1).unwrap(nil), maybe(nil).unwrap(1)
|
127
|
+
assert_equal maybe(1).unwrap { 3 }, nothing.unwrap { 1 }
|
128
|
+
end
|
129
|
+
|
125
130
|
#
|
126
131
|
# Monad laws
|
127
132
|
#
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: monad-maybe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Delon Newman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jeweler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 2.3.9
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 2.3.9
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: yard
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.9.11
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.9.11
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: test-unit
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way.
|
@@ -59,6 +59,7 @@ extensions: []
|
|
59
59
|
extra_rdoc_files:
|
60
60
|
- README.md
|
61
61
|
files:
|
62
|
+
- ".ruby-version"
|
62
63
|
- Gemfile
|
63
64
|
- Gemfile.lock
|
64
65
|
- README.md
|
@@ -82,17 +83,17 @@ require_paths:
|
|
82
83
|
- lib
|
83
84
|
required_ruby_version: !ruby/object:Gem::Requirement
|
84
85
|
requirements:
|
85
|
-
- -
|
86
|
+
- - ">="
|
86
87
|
- !ruby/object:Gem::Version
|
87
88
|
version: '0'
|
88
89
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
90
|
requirements:
|
90
|
-
- -
|
91
|
+
- - ">="
|
91
92
|
- !ruby/object:Gem::Version
|
92
93
|
version: '0'
|
93
94
|
requirements: []
|
94
95
|
rubyforge_project:
|
95
|
-
rubygems_version: 2.
|
96
|
+
rubygems_version: 2.6.11
|
96
97
|
signing_key:
|
97
98
|
specification_version: 4
|
98
99
|
summary: A Ruby implementation of Haskell's Maybe Monad
|