-
Notifications
You must be signed in to change notification settings - Fork 89
Mutual definitions with records
CodingUnit edited this page Nov 30, 2011
·
2 revisions
Mutual Definitions with records
-
Category: Defining Types
-
Link: see Recursive definitions with variant for example of use variant as recursive collections
-
Description: Records can be defined simultaneously to give mutually recursive collections of types.
using System;
using System.Console;
using Nemerle;
// define mutually recursive collections with the class and Record macro
[Record]
class Airport
{
public Name : string;
public Connections : list[AirportConnection];
public override ToString() : string
{
$"Name: $Name; Connections: $Connections"
}
}
variant AirportConnection
{
| Connection {Airport : Airport;}
| None
public override ToString() : string
{
match (this)
{
| Connection(a) => $"Airport: $a"
| _ => "no connection"
}
}
}
module MutualDefinition2
{
Main() : void
{
def lax = Airport("Los Angeles Intl Airport", [AirportConnection.None()]);
def dtw = Airport(name = "Detroit Metro Wayne County", connections = [AirportConnection.None()]);
def sea = Airport("Seattle-Tacoma Intl Airport", connections = [AirportConnection.Connection(dtw), AirportConnection.Connection(lax)]);
WriteLine(lax);
WriteLine(dtw);
WriteLine(sea);
}
}
Name: Los Angeles Intl Airport; Connections: [no connection]
Name: Detroit Metro Wayne County; Connections: [no connection]
Name: Seattle-Tacoma Intl Airport; Connections: [Airport: Name: Detroit Metro Wayne County; Connections: [no connection], Airport: Name: Los Angeles Intl Airport; Connections: [no connection]]
- Copyright
Samples used from “F# 3.0 Sample Pack” (http://fsharp3sample.codeplex.com/) at Codeplex OpenSource Community for non-commercial usage. All copyrights and authorship on materials this publication based on, is belongs to Microsoft corp. Copyright © 2006-2011 Microsoft Corporation, . All rights reserved. Copyright and autorship for materials in Nemerle language belongs to Nemerle Project Team. Copyright © 2008-2011 Nemerle Project Team. All rights reserved.