 
 public struct TypeIdentifierExpression : TypedExpression, ValueExpression, RValueExpression {
     public typealias ValueType = String
+    
+    public let hashValue: Int = nextHashValue()
     
     public let value: String
     public var grouped: Bool

    public let op: Operator
    public var grouped: Bool
    
    public func dump() -> String {
        return self.grouped ? "(\(self.op.symbol)\(self.value.dump()))" : "\(self.op.symbol)\(self.value.dump())"
    }

public struct MethodExpression<S: SignatureExpression> : ExportableExpression {
    public let signature: S
    public let body: [Statement]
    
    public let hashValue: Int = nextHashValue()
}

public struct APIExpression : TopLevelExpression {
    public let name: TypeIdentifierExpression
    public let body: [Expression]
    
    public let hashValue: Int = nextHashValue()
}

public struct ReturnStatement : Statement {
    public let value: Expression
    
    public let hashValue: Int = nextHashValue()
}

public struct AssignmentStatement : Statement {
    public let name: IdentifierExpression
    public let value: Expression
    
    public let hashValue: Int = nextHashValue()
}

public typealias ArgType = GroupableExpression & RValueExpression
