 	let characterParser = %("0"..."9") | %("a"..."z") | %("A"..."Z")
 	let ignoreBeginningOfLine = ignore("\t") ++ ignore("\"")
 	let edgeParser = ignoreBeginningOfLine ++ characterParser+ ++ ignore("\" -> \"") ++ characterParser+ ++ ignore("\";");
+
 	if let (rawSource, rawDestination) = edgeParser(edge)?.0 {
 		let source = String(rawSource.reduce([], combine: +))
 		let destination = String(rawDestination.reduce([], combine: +))

		return Edge(source, destination)
	}
	
	let nodes = uniqueNodes.reduce(Dictionary<Identifier, String>(), combine: { (accum: [Identifier: String], curr: String) in
		let identifierIndex = find(uniqueNodes, curr) ?? 0
		let identifier = nodeIdentifiers[identifierIndex]
		return accum + [identifier: curr]
    })
    
	return Graph(nodes: nodes, edges: Set(edges))
}

	// Skip the title.
	let lines = split(file, { $0 == "\n" })
	let rawLines = lines[1...(lines.count - 2)]
	let rawEdges = map(rawLines) { parseEdge($0) ?? ("", "")}
	let rawSources = map(rawEdges) { $0.0 }
	let rawDestinations = map(rawEdges) { edge in edge.1 }
	let rawNodes = rawSources + rawDestinations
	let uniqueNodes = unique(rawNodes)
	let nodeIdentifiers = map(uniqueNodes) { _ in Identifier() }
