- Learn Scala Programming
- Slava Schmidt
- 321字
- 2021-06-10 19:35:46
Infix types
In the same way that Scala has infix operators, it has infix types. An infix type, such as A Op B, is just any type that has exactly two type operands. It is equivalent to the type defined as Op[A, B]. Op may be any valid identifier.
The type operators have the same associativity as term operators—they are left associative unless an operator ends in : (colon), in which case it is right associative. Consecutive infix operators must have the same associativity. Let's look at an example to understand what this means:
type Or[A, B]
type And[A, B]
type +=[A, B] = Or[A, B]
type =:[A, B] = And[A, B]
type CC = Or[And[A, B], C]
type DA = A =: B =: C
type DB = A And B And C
// type E = A += B =: C // wrong associativity
type F = (A += B) =: C
Here, we defined four types, all of which have two type parameters and so can be used as infix types. Then, we define a type called CC, which expresses some relation between the A, B, and C types. The DA and DB type definitions show what the type definition looks like in infix notation. The first attempt to define some type, E, to be the same as the C type fails because of the different associativity of the types, =+ and =:, and we have demonstrated how parentheses can be used to work around this rule.
If used properly, infix types can greatly improve the readability of the code:
type |[A, B] = Or[A, B]
type [A, B] = And[A, B]
type G = A B | C
Here, we can see how infix types allow you to define type relation in a way that looks similar to Boolean operations.
- Deploying Node.js
- LabVIEW2018中文版 虛擬儀器程序設計自學手冊
- PHP 編程從入門到實踐
- Troubleshooting PostgreSQL
- Windows Forensics Cookbook
- 自然語言處理Python進階
- PHP 7+MySQL 8動態網站開發從入門到精通(視頻教學版)
- Oracle 18c 必須掌握的新特性:管理與實戰
- 軟件品質之完美管理:實戰經典
- 區塊鏈架構之美:從比特幣、以太坊、超級賬本看區塊鏈架構設計
- C++ System Programming Cookbook
- Java程序設計教程
- Learning Zimbra Server Essentials
- 計算機輔助設計與繪圖技術(AutoCAD 2014教程)(第三版)
- Python AI游戲編程入門:基于Pygame和PyTorch