Skip to content

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.

Clone this wiki locally