README.md in haskell-0.0.2 vs README.md in haskell-0.0.3

- old
+ new

@@ -1,19 +1,22 @@ # Ruby with Type. -```rb +Matz has mentioned Ruby3.0 with static type at some confluences. But almost all rubyists(include me) are not sure how typed Ruby is. +But it's worth thinking more. This gem is kind of trial without so much side-effect. + +```rb require 'haskell' -# Ruby 2.1.0+ +# ex1: (Ruby 2.1.0+) class MyClass - type Numeric >= Numeric >= Numeric, def sum(x, y) + type Numeric >= Numeric >= Numeric, def sum(x, y) x + y end type Numeric >= Numeric >= Numeric, def wrong_sum(x, y) - 'string' + 'string' end end MyClass.new.sum(1, 2) #=> 3 @@ -22,19 +25,66 @@ #=> ArgumentError: Wrong type of argument, type of "str" should be Numeric MyClass.new.wrong_sum(1, 2) #=> TypeError: Expected wrong_sum to return Numeric but got "str" instead -# Ruby 1.8.0+ + +# ex2: (Ruby 2.1.0+) +class People + type People >= Any, def marry(people) + # Your Ruby code as usual + end +end + +People.new.marry(People.new) +#=> no error + +People.new.marry('non people') +#=> ArgumentError: Wrong type of argument, type of "non people" should be People + + +# ex3: (Ruby 1.8.0+) class MyClass def sum(x, y) x + y end type Numeric >= Numeric >= Numeric, :sum end ``` +## Feature +### Typed method can coexist with non-typed method + +```ruby +# It's totally OK!! +class MyClass + type Numeric >= Numeric >= Numeric, def sum(x, y) + x + y + end + + def wrong_sum(x, y) + 'string' + end +end +``` + +### Duck typing + +```ruby + +class MyClass + type Any >= Numeric, def foo(any_obj) + 1 + end +end + +# It's totally OK!! +MyClass.new.foo(1) +# It's totally OK!! +MyClass.new.foo('str') +``` + ## Installation Add this line to your application's Gemfile: ```ruby @@ -47,32 +97,16 @@ Or install it yourself as: $ gem install haskell -## More example -```ruby -class People - type People >= Any, def marry(people) - # Your Ruby code as usual - end -end - -People.new.marry(People.new) -#=> no error - -People.new.marry('non people') -#=> ArgumentError: Wrong type of argument, type of "non people" should be People - -``` - ## Contributing 1. Fork it ( https://github.com/[my-github-username]/haskell/fork ) 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create a new Pull Request ## Credits -[@chancancode](https://github.com/chancancode) first brought this to my attention. +[@chancancode](https://github.com/chancancode) first brought this to my attention. I've stolen some idea from him.