hubris 0.0.3 → 0.0.4
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.
- data/.gitignore +31 -0
- data/.rvmrc +2 -0
- data/Gemfile +11 -0
- data/Haskell/Hubrify.hs +69 -0
- data/Haskell/LICENSE +22 -0
- data/Haskell/Language/Ruby/Foo.hs +20 -0
- data/Haskell/Language/Ruby/Hubris/Binding.hsc +214 -0
- data/Haskell/Language/Ruby/Hubris/GHCBuild.hs +46 -0
- data/Haskell/Language/Ruby/Hubris/Hash.hs +27 -0
- data/Haskell/Language/Ruby/Hubris/Interpolator.hs +22 -0
- data/Haskell/Language/Ruby/Hubris/LibraryBuilder.hs +181 -0
- data/Haskell/Language/Ruby/Hubris/ZCode.hs +68 -0
- data/Haskell/Language/Ruby/Hubris.hs +254 -0
- data/Haskell/Language/Ruby/Wrappers.hs +32 -0
- data/Haskell/Language/Ruby/testLib.hs +9 -0
- data/Haskell/Setup.hs +31 -0
- data/Haskell/cbits/rshim.c +46 -0
- data/Haskell/cbits/rshim.h +50 -0
- data/Haskell/hubris.cabal +53 -0
- data/INSTALL +21 -0
- data/Manifest.txt +22 -0
- data/PostInstall.txt +1 -0
- data/README.markdown +107 -0
- data/Rakefile +46 -43
- data/VERSION +1 -0
- data/doc/CommonErrors.txt +18 -0
- data/doc/CommonErrors.txt~HEAD +18 -0
- data/doc/don_feedback.txt +25 -0
- data/doc/haskell-hubris.tex +242 -0
- data/doc/new_interface.rb +74 -0
- data/doc/ruby-hubris.tex +176 -0
- data/doc/wisdom_of_ancients.txt +55 -0
- data/ext/hubris.rb +4 -0
- data/ext/stub/extconf.rb +5 -0
- data/ext/{HubrisStubLoader.c → stub/stub.c} +1 -1
- data/hubris.gemspec +31 -0
- data/lib/Makefile +181 -0
- data/lib/hubris/version.rb +3 -0
- data/lib/hubris.rb +16 -13
- data/rspec.rake +21 -0
- data/sample/Fibonacci.hs +2 -2
- data/sample/config.ru +3 -1
- data/script/ci.sh +25 -0
- data/script/console +10 -0
- data/spec/hubris_spec.rb +173 -47
- data/tasks/extconf/stub.rake +43 -0
- data/tasks/extconf.rake +13 -0
- metadata +118 -27
- data/ext/extconf.rb +0 -5
data/spec/hubris_spec.rb
CHANGED
@@ -1,27 +1,13 @@
|
|
1
1
|
# encoding: ASCII-8BIT
|
2
2
|
load File.dirname(__FILE__) + '/spec_helper.rb'
|
3
3
|
require "hubris"
|
4
|
-
Hubris.add_packages %w(base)
|
5
|
-
|
6
|
-
# # just want to check it's actually possible to load a library dynamically
|
7
|
-
# describe "dlload" do
|
8
|
-
# it "actually builds and loads a C level dylib stupidly" do
|
9
|
-
# system "cd sample; make"
|
10
|
-
# `cd sample; ruby hsload.rb`.chomp.should eql("144")
|
11
|
-
# end
|
12
|
-
# end
|
13
|
-
|
14
|
-
class Target
|
15
|
-
def foo_local
|
16
|
-
14
|
17
|
-
end
|
18
|
-
end
|
4
|
+
Hubris.add_packages %w(base bytestring)
|
19
5
|
|
20
6
|
Signal.trap("INT", 'EXIT');
|
21
7
|
|
22
|
-
describe "Target" do
|
8
|
+
describe "Target" do
|
23
9
|
it "whines like a little baby when you pass it bad haskell" do
|
24
|
-
lambda{ class Foo; hubris :inline => "broken
|
10
|
+
lambda{ class Foo; hubris :inline => "broken = (1 + \"a string\")"; end}.should raise_error(HaskellError)
|
25
11
|
end
|
26
12
|
|
27
13
|
it "ignores a comment" do
|
@@ -34,13 +20,21 @@ foo False = True"; end
|
|
34
20
|
}.should_not raise_error
|
35
21
|
end
|
36
22
|
|
37
|
-
it "
|
38
|
-
|
39
|
-
# lambda { t.inline("working _ = T_FIXNUM (1+2)", { :no_strict => true }) }.should_not raise_error
|
40
|
-
lambda { class Foo; hubris :inline => "working :: Integer -> Integer; working a = 2*a"; end}.should_not raise_error
|
23
|
+
it "doesn't get fussy about non-exportable stuff" do
|
24
|
+
lambda { class Empty; hubris :inline => "data Foo=Foo; fooerator :: Foo->Foo; fooerator Foo = Foo";end }.should_not raise_error
|
41
25
|
end
|
42
|
-
|
43
|
-
|
26
|
+
|
27
|
+
it "handles booleans" do
|
28
|
+
class Bar
|
29
|
+
hubris :inline => "my_negate True = False;my_negate False = True", :no_strict => true
|
30
|
+
end
|
31
|
+
t = Bar.new
|
32
|
+
# puts t.methods
|
33
|
+
t.my_negate(false).should eql(true)
|
34
|
+
t.my_negate(true).should eql(false)
|
35
|
+
lambda{ t.my_negate("Banana")}.should raise_error
|
36
|
+
end
|
37
|
+
end
|
44
38
|
# it "handles booleans" do
|
45
39
|
# class Bar
|
46
40
|
# hubris :inline => "my_negate True = False;my_negate False = True", :no_strict => true
|
@@ -51,13 +45,16 @@ foo False = True"; end
|
|
51
45
|
# t.my_negate(true).should eql(false)
|
52
46
|
# lambda{ t.my_negate("Banana")}.should raise_error
|
53
47
|
# end
|
54
|
-
|
55
|
-
|
48
|
+
|
49
|
+
|
50
|
+
describe "Floats" do
|
51
|
+
before do
|
56
52
|
class Doubler
|
57
53
|
hubris :inline => "triple :: Double -> Double; triple a = a*3.0", :no_strict => true
|
58
54
|
end
|
55
|
+
end
|
56
|
+
it "handles doubles" do
|
59
57
|
d = Doubler.new
|
60
|
-
|
61
58
|
d.triple(3.4).should eql(10.2)
|
62
59
|
end
|
63
60
|
end
|
@@ -71,14 +68,101 @@ describe "Strings" do
|
|
71
68
|
end
|
72
69
|
end
|
73
70
|
|
71
|
+
describe "tuples" do
|
72
|
+
before do
|
73
|
+
class Tupler
|
74
|
+
hubris :inline => "revTup :: (Integer,Integer) -> (Integer,Integer); revTup (a,b) = (b,a)"
|
75
|
+
hubris :inline => "expand :: (Integer,Integer) -> (Integer,Integer,Integer); expand (a,b) = (b,a,b)"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
before :each do
|
80
|
+
@t = Tupler.new
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'can call a tuple with an array' do
|
84
|
+
@t.revTup([1,2]).should == [2,1]
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'has no funny array business' do
|
88
|
+
@t.expand([1,2]).should == [2,1,2]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
74
92
|
describe "BigInt" do
|
75
|
-
|
93
|
+
before do
|
76
94
|
class Bigint
|
77
95
|
hubris :inline => "big_inc :: Integer -> Integer; big_inc i = i + 1"
|
78
96
|
end
|
79
|
-
|
80
|
-
|
81
|
-
|
97
|
+
end
|
98
|
+
|
99
|
+
before(:each) do
|
100
|
+
# pending
|
101
|
+
@b = Bigint.new
|
102
|
+
end
|
103
|
+
|
104
|
+
it "handles smalls" do
|
105
|
+
@b.big_inc(1).should eql(2)
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
it 'handles foo' do
|
110
|
+
@b.big_inc(536870912).should == 536870913
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'handles foo' do
|
114
|
+
@b.big_inc(536870913).should == 536870914
|
115
|
+
end
|
116
|
+
|
117
|
+
# it 'tests' do
|
118
|
+
# low = 536870912
|
119
|
+
# high = 1073741825
|
120
|
+
|
121
|
+
# while low != high
|
122
|
+
# mid = (high + low)/2
|
123
|
+
# puts "mid is #{mid}"
|
124
|
+
# if @b.big_inc(mid) == mid + 1
|
125
|
+
# low = mid
|
126
|
+
# else
|
127
|
+
# high = mid
|
128
|
+
# end
|
129
|
+
# end
|
130
|
+
# puts "highest working is #{mid}"
|
131
|
+
# end
|
132
|
+
|
133
|
+
it 'handles 30 bits' do
|
134
|
+
@b.big_inc(1073741822).should == 1073741823
|
135
|
+
end
|
136
|
+
it 'handles > 30 bits' do
|
137
|
+
@b.big_inc(1073741823).should == 1073741824
|
138
|
+
end
|
139
|
+
|
140
|
+
it "handles really big ints" do
|
141
|
+
@b.big_inc(1000000000000000000000000).should eql(1000000000000000000000001)
|
142
|
+
end
|
143
|
+
|
144
|
+
it "handles ints just before the border" do
|
145
|
+
@b.big_inc(2147483647).should == 2147483648
|
146
|
+
end
|
147
|
+
|
148
|
+
it "handles > int but < bigint" do
|
149
|
+
@b.big_inc(2147483648).should == 2147483649
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
describe "BigID" do
|
155
|
+
|
156
|
+
before do
|
157
|
+
class BigId
|
158
|
+
hubris :inline => "big_inc :: Integer -> Integer; big_inc i = i"
|
159
|
+
end
|
160
|
+
@b = BigId.new
|
161
|
+
end
|
162
|
+
|
163
|
+
it 'returns a big fix' do
|
164
|
+
|
165
|
+
@b.big_inc(1073741824).should == 1073741824
|
82
166
|
end
|
83
167
|
end
|
84
168
|
|
@@ -97,10 +181,7 @@ describe 'Multiple' do
|
|
97
181
|
# and it doesn't wipe out other methods on the class
|
98
182
|
t.foo_local.should eql(14)
|
99
183
|
t.incr(3).should eql(4)
|
100
|
-
|
101
|
-
# JHC
|
102
|
-
# lambda { t.mydouble(2.3)}.should raise_error(HaskellError)
|
103
|
-
# Fooclever.mydouble(2.3).should raise_error(RuntimeError)
|
184
|
+
lambda { t.mydouble(2.3)}.should raise_error(HaskellError)
|
104
185
|
end
|
105
186
|
end
|
106
187
|
|
@@ -118,7 +199,7 @@ describe 'Arrays' do
|
|
118
199
|
end
|
119
200
|
t=ArrayTest2.new
|
120
201
|
t.elts(5).should eql([1,2,3,4,5])
|
121
|
-
lambda { t.elts("A Banana")}.should raise_error(HaskellError)
|
202
|
+
lambda { t.elts("A Banana").should == "FOO" }.should raise_error(HaskellError)
|
122
203
|
end
|
123
204
|
it "uses a Haskell array" do
|
124
205
|
class ArrayTest3
|
@@ -148,9 +229,9 @@ describe "MaybeIn" do
|
|
148
229
|
hubris :inline => "foo:: Maybe Int -> Int; foo (Just _) = 1; foo Nothing = 0"
|
149
230
|
end
|
150
231
|
m=MaybeIn.new
|
151
|
-
|
152
|
-
|
153
|
-
|
232
|
+
m.foo(1).should == 2
|
233
|
+
m.foo(20).should == 40
|
234
|
+
m.foo(nil).should == 0
|
154
235
|
lambda{ m.foo("blah") }.should raise_error(HaskellError)
|
155
236
|
# here's a tricky bit: in the previous example, we had to look at the value of the
|
156
237
|
# Maybe, so the exception got triggered.
|
@@ -158,8 +239,8 @@ describe "MaybeIn" do
|
|
158
239
|
# deeply examine the something. Arguably, it would be less surprising if we always looked
|
159
240
|
# deeply into it, but it's up for debate. TODO
|
160
241
|
|
161
|
-
lazy = MaybeLazy.new
|
162
|
-
lazy.foo("blah").should == 1
|
242
|
+
#lazy = MaybeLazy.new
|
243
|
+
#lazy.foo("blah").should == 1
|
163
244
|
end
|
164
245
|
end
|
165
246
|
|
@@ -207,6 +288,7 @@ describe "Overwrite" do
|
|
207
288
|
hubris :inline => "myid::Int -> Int; myid i = i+1"
|
208
289
|
end
|
209
290
|
t=Overlapping.new
|
291
|
+
# puts t.methods
|
210
292
|
t.myid(1).should eql(2)
|
211
293
|
end
|
212
294
|
|
@@ -255,6 +337,7 @@ describe 'Idempotence' do
|
|
255
337
|
end
|
256
338
|
|
257
339
|
it "can insert the same code into two ruby modules" do
|
340
|
+
|
258
341
|
class Foo10
|
259
342
|
hubris :inline => "foobar::Double -> Double;foobar n = n+1.0"
|
260
343
|
end
|
@@ -270,9 +353,9 @@ end
|
|
270
353
|
|
271
354
|
describe 'Realworld' do
|
272
355
|
it "can handle the bytestring lib" do
|
273
|
-
|
356
|
+
# pending "check"
|
274
357
|
class ByteString
|
275
|
-
hubris :module => "Data.ByteString"
|
358
|
+
hubris :module => "Data.ByteString", :no_strict => true
|
276
359
|
end
|
277
360
|
|
278
361
|
b = ByteString.new
|
@@ -280,18 +363,23 @@ describe 'Realworld' do
|
|
280
363
|
end
|
281
364
|
|
282
365
|
it "can import zlib" do
|
283
|
-
|
366
|
+
|
284
367
|
class ZLib
|
285
368
|
hubris :module => 'Codec.Compression.GZip', :packages => ['zlib', 'bytestring']
|
286
369
|
end
|
287
370
|
z=ZLib.new
|
288
371
|
w="osatnoensauhoestnuhoastuhoeatnuhosnueohnsauostneo"
|
289
|
-
|
372
|
+
pending "Not doing the right thing with embedded nulls yet"
|
373
|
+
# for the moment, we're happy if it errors out in a controlled way
|
374
|
+
|
375
|
+
lambda {z.decompress(z.compress(w)).should eql(w)}.should raise_error(HaskellError)
|
376
|
+
|
290
377
|
x=z.compress(w)
|
291
|
-
x.each_byte {|c| print c, '
|
378
|
+
x.each_byte {|c| print c, ':' }
|
292
379
|
puts "length|#{x.length}|"
|
380
|
+
# x.length.should > 5 # probably some shannon thing here
|
293
381
|
puts "second"
|
294
|
-
z.decompress(z.compress(w)).should eql(w)
|
382
|
+
lambda {z.decompress(z.compress(w)).should eql(w)}.should_not raise_error
|
295
383
|
end
|
296
384
|
|
297
385
|
end
|
@@ -304,7 +392,6 @@ describe 'Performance' do
|
|
304
392
|
it "caches its output" do
|
305
393
|
# only relevant for inlining
|
306
394
|
|
307
|
-
t=Target.new
|
308
395
|
class First
|
309
396
|
hubris :inline => "foobar::Int->Int; foobar a = a"
|
310
397
|
end
|
@@ -347,4 +434,43 @@ describe 'Performance' do
|
|
347
434
|
threads.each { |t| t.join }
|
348
435
|
}.should_not raise_error
|
349
436
|
end
|
437
|
+
|
438
|
+
end
|
439
|
+
|
440
|
+
describe "IO" do
|
441
|
+
it "can write a variable" do
|
442
|
+
pending
|
443
|
+
class IOTest
|
444
|
+
hubris :inline =><<EOF
|
445
|
+
import Data.IORef
|
446
|
+
import System.IO.Unsafe
|
447
|
+
ref :: IORef Int
|
448
|
+
ref = unsafePerformIO $ newIORef 10
|
449
|
+
|
450
|
+
readRef :: IO Int
|
451
|
+
readRef = readIORef ref
|
452
|
+
modify :: Int -> IO ()
|
453
|
+
modify n = writeIORef ref n
|
454
|
+
EOF
|
455
|
+
|
456
|
+
end
|
457
|
+
i = IOTest.new
|
458
|
+
i.readRef(nil).should == 10
|
459
|
+
i.modify(20)
|
460
|
+
i.readRef(nil).should == 20
|
461
|
+
|
462
|
+
end
|
463
|
+
end
|
464
|
+
|
465
|
+
describe "multiple arguments" do
|
466
|
+
it "can call a haskell function with multiple arguments" do
|
467
|
+
class Mult
|
468
|
+
hubris :inline => <<EOF
|
469
|
+
add :: Integer -> Integer -> Integer -> Integer
|
470
|
+
add x y z = x+y+z
|
471
|
+
EOF
|
472
|
+
end
|
473
|
+
|
474
|
+
Mult.new.add(1,9,100).should == 110
|
475
|
+
end
|
350
476
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
namespace :extconf do
|
2
|
+
extension = File.basename(__FILE__, '.rake')
|
3
|
+
|
4
|
+
ext = "ext/#{extension}"
|
5
|
+
ext_so = "#{ext}/#{extension}.#{Config::CONFIG['DLEXT']}"
|
6
|
+
ext_files = FileList[
|
7
|
+
"#{ext}/*.c",
|
8
|
+
"#{ext}/*.h",
|
9
|
+
"#{ext}/*.rl",
|
10
|
+
"#{ext}/extconf.rb",
|
11
|
+
"#{ext}/Makefile",
|
12
|
+
# "lib"
|
13
|
+
]
|
14
|
+
|
15
|
+
|
16
|
+
task :compile => extension do
|
17
|
+
if Dir.glob("**/#{extension}.{o,so,dll}").length == 0
|
18
|
+
STDERR.puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
19
|
+
STDERR.puts "Gem actually failed to build. Your system is"
|
20
|
+
STDERR.puts "NOT configured properly to build #{GEM_NAME}."
|
21
|
+
STDERR.puts "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
22
|
+
exit(1)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "Builds just the #{extension} extension"
|
27
|
+
task extension.to_sym => ["#{ext}/Makefile", ext_so ]
|
28
|
+
|
29
|
+
file "#{ext}/Makefile" => ["#{ext}/extconf.rb"] do
|
30
|
+
Dir.chdir(ext) do ruby "extconf.rb" end
|
31
|
+
end
|
32
|
+
|
33
|
+
file ext_so => ext_files do
|
34
|
+
Dir.chdir(ext) do
|
35
|
+
sh(PLATFORM =~ /win32/ ? 'nmake' : 'make') do |ok, res|
|
36
|
+
if !ok
|
37
|
+
require "fileutils"
|
38
|
+
FileUtils.rm Dir.glob('*.{so,o,dll,bundle}')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/tasks/extconf.rake
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
namespace :extconf do
|
2
|
+
desc "Compiles the Ruby extension"
|
3
|
+
task :compile
|
4
|
+
end
|
5
|
+
|
6
|
+
task :compile => "extconf:compile"
|
7
|
+
|
8
|
+
task :test => :compile
|
9
|
+
|
10
|
+
BIN = "*.{bundle,jar,so,obj,pdb,lib,def,exp}"
|
11
|
+
$hoe.clean_globs |= ["ext/**/#{BIN}", "lib/**/#{BIN}", 'ext/**/Makefile']
|
12
|
+
$hoe.spec.require_paths = Dir['{lib,ext/*}']
|
13
|
+
$hoe.spec.extensions = FileList["ext/**/extconf.rb"].to_a
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hubris
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 23
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Mark Wotton
|
@@ -11,77 +17,162 @@ autorequire:
|
|
11
17
|
bindir: bin
|
12
18
|
cert_chain: []
|
13
19
|
|
14
|
-
date:
|
20
|
+
date: 2011-02-24 00:00:00 +11:00
|
15
21
|
default_executable:
|
16
22
|
dependencies:
|
17
23
|
- !ruby/object:Gem::Dependency
|
18
|
-
name:
|
24
|
+
name: rake-compiler
|
25
|
+
prerelease: false
|
26
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
hash: 15
|
32
|
+
segments:
|
33
|
+
- 0
|
34
|
+
- 7
|
35
|
+
- 6
|
36
|
+
version: 0.7.6
|
19
37
|
type: :runtime
|
20
|
-
|
21
|
-
|
38
|
+
version_requirements: *id001
|
39
|
+
- !ruby/object:Gem::Dependency
|
40
|
+
name: rspec
|
41
|
+
prerelease: false
|
42
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - "="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
hash: 31
|
48
|
+
segments:
|
49
|
+
- 2
|
50
|
+
- 4
|
51
|
+
- 0
|
52
|
+
version: 2.4.0
|
53
|
+
type: :development
|
54
|
+
version_requirements: *id002
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
prerelease: false
|
58
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
22
60
|
requirements:
|
23
61
|
- - ">="
|
24
62
|
- !ruby/object:Gem::Version
|
63
|
+
hash: 3
|
64
|
+
segments:
|
65
|
+
- 0
|
25
66
|
version: "0"
|
26
|
-
|
67
|
+
type: :runtime
|
68
|
+
version_requirements: *id003
|
27
69
|
- !ruby/object:Gem::Dependency
|
28
70
|
name: open4
|
29
|
-
|
30
|
-
|
31
|
-
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
32
74
|
requirements:
|
33
75
|
- - ">="
|
34
76
|
- !ruby/object:Gem::Version
|
77
|
+
hash: 3
|
78
|
+
segments:
|
79
|
+
- 0
|
35
80
|
version: "0"
|
36
|
-
|
37
|
-
|
38
|
-
|
81
|
+
type: :runtime
|
82
|
+
version_requirements: *id004
|
83
|
+
description: A bridge between Ruby and Haskell
|
84
|
+
email:
|
85
|
+
- mwotton@gmail.com
|
39
86
|
executables: []
|
40
87
|
|
41
88
|
extensions:
|
42
|
-
-
|
89
|
+
- Rakefile
|
43
90
|
extra_rdoc_files: []
|
44
91
|
|
45
92
|
files:
|
93
|
+
- .gitignore
|
94
|
+
- .rvmrc
|
95
|
+
- Gemfile
|
46
96
|
- HISTORY.markdown
|
47
|
-
-
|
48
|
-
-
|
49
|
-
-
|
97
|
+
- Haskell/Hubrify.hs
|
98
|
+
- Haskell/LICENSE
|
99
|
+
- Haskell/Language/Ruby/Foo.hs
|
100
|
+
- Haskell/Language/Ruby/Hubris.hs
|
101
|
+
- Haskell/Language/Ruby/Hubris/Binding.hsc
|
102
|
+
- Haskell/Language/Ruby/Hubris/GHCBuild.hs
|
103
|
+
- Haskell/Language/Ruby/Hubris/Hash.hs
|
104
|
+
- Haskell/Language/Ruby/Hubris/Interpolator.hs
|
105
|
+
- Haskell/Language/Ruby/Hubris/LibraryBuilder.hs
|
106
|
+
- Haskell/Language/Ruby/Hubris/ZCode.hs
|
107
|
+
- Haskell/Language/Ruby/Wrappers.hs
|
108
|
+
- Haskell/Language/Ruby/testLib.hs
|
109
|
+
- Haskell/Setup.hs
|
110
|
+
- Haskell/cbits/rshim.c
|
111
|
+
- Haskell/cbits/rshim.h
|
112
|
+
- Haskell/hubris.cabal
|
113
|
+
- INSTALL
|
114
|
+
- Manifest.txt
|
115
|
+
- PostInstall.txt
|
116
|
+
- README.markdown
|
50
117
|
- Rakefile
|
51
|
-
-
|
118
|
+
- VERSION
|
119
|
+
- doc/CommonErrors.txt
|
120
|
+
- doc/CommonErrors.txt~HEAD
|
121
|
+
- doc/don_feedback.txt
|
122
|
+
- doc/haskell-hubris.tex
|
123
|
+
- doc/new_interface.rb
|
124
|
+
- doc/ruby-hubris.tex
|
125
|
+
- doc/wisdom_of_ancients.txt
|
126
|
+
- ext/hubris.rb
|
127
|
+
- ext/stub/extconf.rb
|
128
|
+
- ext/stub/stub.c
|
129
|
+
- hubris.gemspec
|
130
|
+
- lib/Makefile
|
131
|
+
- lib/hubris.rb
|
132
|
+
- lib/hubris/version.rb
|
133
|
+
- rspec.rake
|
52
134
|
- sample/Fibonacci.hs
|
135
|
+
- sample/config.ru
|
136
|
+
- script/ci.sh
|
137
|
+
- script/console
|
53
138
|
- spec/hubris_spec.rb
|
54
139
|
- spec/spec.opts
|
55
140
|
- spec/spec_helper.rb
|
141
|
+
- tasks/extconf.rake
|
142
|
+
- tasks/extconf/stub.rake
|
56
143
|
has_rdoc: true
|
57
|
-
homepage: http://
|
144
|
+
homepage: http://rubygems.org/gems/hubris
|
58
145
|
licenses: []
|
59
146
|
|
60
147
|
post_install_message:
|
61
|
-
rdoc_options:
|
62
|
-
|
63
|
-
- --charset=UTF-8
|
148
|
+
rdoc_options: []
|
149
|
+
|
64
150
|
require_paths:
|
65
151
|
- lib
|
66
|
-
- ext
|
67
152
|
required_ruby_version: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
68
154
|
requirements:
|
69
155
|
- - ">="
|
70
156
|
- !ruby/object:Gem::Version
|
157
|
+
hash: 3
|
158
|
+
segments:
|
159
|
+
- 0
|
71
160
|
version: "0"
|
72
|
-
version:
|
73
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
|
+
none: false
|
74
163
|
requirements:
|
75
164
|
- - ">="
|
76
165
|
- !ruby/object:Gem::Version
|
166
|
+
hash: 3
|
167
|
+
segments:
|
168
|
+
- 0
|
77
169
|
version: "0"
|
78
|
-
version:
|
79
170
|
requirements: []
|
80
171
|
|
81
|
-
rubyforge_project:
|
82
|
-
rubygems_version: 1.3.
|
172
|
+
rubyforge_project: Hubris
|
173
|
+
rubygems_version: 1.3.7
|
83
174
|
signing_key:
|
84
175
|
specification_version: 3
|
85
|
-
summary:
|
176
|
+
summary: A bridge between Ruby and Haskell
|
86
177
|
test_files: []
|
87
178
|
|