type 매크로는 함수를 정의하거나 where 절을 사용해 기존 타입에서 신규 타입을 생성하는 데 사용할 수 있는 특수한 Verse 구조체입니다. type매크로는 타입이 사용될 수 있는 위치 어디서든 사용할 수 있습니다. 예를 들어, 다음 예시는 where 절을 사용해 새로운 타입을 생성하고, 해당 타입을 함수 내에서 사용합니다.
# Construct a new type with a where clause
uint8 := type{X:int where 0 <= X, X < 256}
# Define a new function using uint8
Foo():uint8 = 0where 절은 함수 파라미터 정의에서 또는 숫자 타입의 조건 범위로만 지원됩니다.
다음 예시에서는 type 매크로를 사용해 함수를 신규 함수에 대한 인수로 정의합니다.
# Define a function with type
Bar(X:type{_():uint8}):uint8 = X()
# Call Bar with Foo argument
Y := Bar(Foo)이 예시에서는 또한 특수한 _ 식별자도 활용합니다. 이 식별자는 다른 상황이라면 사용되지 않을 이름을 실제로 제공할 필요 없이, 식별자가 예상되는 위치에서 type에 사용될 수 있습니다. 이는 읽는 사람에게 표현식 자체는 중요하지 않고, _가 속해 있는 정의가 중요하다는 것을 알립니다.
특수한 효과가 없는 함수에 더해, type 매크로는 특히 기본값이 아닌 효과가 있는 함수 타입을 설명하는 데 유용합니다. 예를 들면 다음과 같습니다.
comparison := enum:
LT
EQ
GT
Less(X:int, Y:int)<decides>:void =
X < Y
Equal(X:t, Y:t where t:subtype(comparable))<decides>:void =
X = Y
여기에서 비교 표현식은 비교 열거형을 각 특정한 열거형 값에 해당하는 비교 연산으로 전환합니다.