class DnsRecord {
String recordType;
String domainName;
String cnameAlias;
IpAddr recordIp;
int ttl;
}
if(record.recordType.equals("CNAME")) {
// should not be null
record.cnameAlias;
} else if(record.recordType.equals("A")) {
// should not be null
record.recordIp;
} else {
// ???
}
switch() {
//...
case default:
throw new RuntimeException(
"This should not happen lol"
);
}
a * b
(Bool * Bool)
2 * 2 = 4
Pending | Accepted | Rejected
Status + Bool
3 + 2 = 5
CnameRecord ( ttl, name, alias )
| ARecord ( ttl, name, ipv4 address )
| AaaaRecord ( ttl, name, ipv6 address )
| TxtRecord ( ttl, name, value )
data DnsRecord =
CnameRecord Int String String
| ARecord Int String IpV4
| AaaaRecord Int String IpV6
| TxtRecord Int String String
sealed trait DnsRecord
case class CnameRecord(...)
extends DnsRecord
case class ARecord(...)
extends DnsRecord
case class AaaaRecord(...)
extends DnsRecord
case class TxtRecord(...)
extends DnsRecord
var adt = require('adt');
var DnsRecord = adt.data({
CnameRecord: { ttl: adt.only(Number), ... },
ARecord: { ttl: adt.only(Number), ... },
AaaaRecord: { ttl: adt.only(Number), ... }
});
DnsRecord( ttl, name,
AValue(ipv4)
| AaaaValue(ipv6)
| CnameValue(alias)
| TxtValue(name)
(a * b + a * c)
<=>
a * (b + c)
(a * b) <=> (b * a)
(a + b) <=> (b + a)
(a * 1) <=> a
(a + 0) <=> a
(a + b) + c <=> a + (b + c)
(a * b) * c <=> a * (b * c)
a -> b
b
a
c
(a * b)
c
b
)a
(a, b) -> c
a -> b -> c