Sha256: 33e2b5839ea0601a2278275f1f62828994a36f3afbb383b5f9874e64414af679
Contents?: true
Size: 1.96 KB
Versions: 32
Compression:
Stored size: 1.96 KB
Contents
# frozen_string_literal: true # Returns the data type of a given value with a given degree of generality. # # ```puppet # type InferenceFidelity = Enum[generalized, reduced, detailed] # # function type(Any $value, InferenceFidelity $fidelity = 'detailed') # returns Type # ``` # # @example Using `type` # # ``` puppet # notice type(42) =~ Type[Integer] # ``` # # Would notice `true`. # # By default, the best possible inference is made where all details are retained. # This is good when the type is used for further type calculations but is overwhelmingly # rich in information if it is used in a error message. # # The optional argument `$fidelity` may be given as (from lowest to highest fidelity): # # * `generalized` - reduces to common type and drops size constraints # * `reduced` - reduces to common type in collections # * `detailed` - (default) all details about inferred types is retained # # @example Using `type()` with different inference fidelity: # # ``` puppet # notice type([3.14, 42], 'generalized') # notice type([3.14, 42], 'reduced'') # notice type([3.14, 42], 'detailed') # notice type([3.14, 42]) # ``` # # Would notice the four values: # # 1. `Array[Numeric]` # 2. `Array[Numeric, 2, 2]` # 3. `Tuple[Float[3.14], Integer[42,42]]]` # 4. `Tuple[Float[3.14], Integer[42,42]]]` # # @since 4.4.0 # Puppet::Functions.create_function(:type) do dispatch :type_detailed do param 'Any', :value optional_param 'Enum[detailed]', :inference_method end dispatch :type_parameterized do param 'Any', :value param 'Enum[reduced]', :inference_method end dispatch :type_generalized do param 'Any', :value param 'Enum[generalized]', :inference_method end def type_detailed(value, _ = nil) Puppet::Pops::Types::TypeCalculator.infer_set(value) end def type_parameterized(value, _) Puppet::Pops::Types::TypeCalculator.infer(value) end def type_generalized(value, _) Puppet::Pops::Types::TypeCalculator.infer(value).generalize end end
Version data entries
32 entries across 32 versions & 1 rubygems