Class: Qrb::SeqType

Inherits:
Type
  • Object
show all
Includes:
CollectionType
Defined in:
lib/qrb/type/seq_type.rb

Overview

The Seq type generator allows capturing sequences of values. For example, a (implicitely temporal) series of temperature measures could be written as:

Measures = [Temperature]

This class allows capturing those sequence types, e.g.:

Temperature = BuiltinType.new(Float)
Measures    = SeqType.new(Temperature)

An array of values is used as concrete representation for such sequences:

R(Measures) = Array[R(Temperature)] = Array[Float]

Accordingly, the ‘dress` transformation function has the signature below. It expects it’s Alpha/Object argument to be a object responding to ‘each` (with the ruby idiomatic semantics that such a `each` returns an Enumerator when invoked without block).

dress :: Alpha  -> Measures      throws TypeError
dress :: Object -> Array[Float]  throws TypeError

Instance Attribute Summary

Attributes included from CollectionType

#elm_type

Instance Method Summary collapse

Methods included from CollectionType

#==, #hash, #initialize

Methods inherited from Type

#initialize, #name, #name=, #to_s

Instance Method Details

#default_nameObject



46
47
48
# File 'lib/qrb/type/seq_type.rb', line 46

def default_name
  "[#{elm_type.name}]"
end

#dress(value, handler = DressHelper.new) ⇒ Object

Apply the element type’s ‘dress` transformation to each element of `value` (expected to respond to `each`). Return converted values in a ruby Array.



36
37
38
39
40
41
42
43
44
# File 'lib/qrb/type/seq_type.rb', line 36

def dress(value, handler = DressHelper.new)
  handler.failed!(self, value) unless value.respond_to?(:each)

  array = []
  handler.iterate(value) do |elm, index|
    array << elm_type.dress(elm, handler)
  end
  array
end

#include?(value) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/qrb/type/seq_type.rb', line 29

def include?(value)
  value.is_a?(::Array) and value.all?{|v| elm_type.include?(v) }
end