From: "T. Onoma" Date: 2003-11-21T14:36:19+09:00 Subject: Re: Partial Euphoric Type Checking (now Ducked!) quack! quack! I added duck typing capability to my euphoric type checking system: module Kernel def typechecking(x=nil) return $_tc if x == nil $_tc = x ? true : false end end class Module def type(tname, *resp, &check) define_method(tname) do |*v| if $_tc unless v.all? { |y| resp.all? { |z| y.send(:respond_to?, z) } } raise TypeError, "#{v}" end unless v.all? { |y| check.call(y) } raise TypeError, "#{v}" end end return *v end end end Probabably could be written a little more concise. now example: type :big4, '>', 'to_i', 'succ' do |x| x > 4 end def ameth(x) big4 x #--- puts x end big4 will make sure parameter responds to #> #to_i and #succ and is also greater than 4. i also have a some better ideas for sugar too: class TypeTest type big4(x) '>', 'to_i', 'succ' unless x > 4 end def ameth(big4 x) puts x end end getting better? we may have other clauses besides 'unless' too (?) seems like i'm starting to converge on Sean's idea from another angle. except mine is dynamic runtime, but it can be turned offf globally or locally. BUT!!!!!!!!!!! i have discovered a problem with all type systems! see next post....(or 2) -t0