Public Class Pattern
    Public ReadOnly Property Type As String
    Public ReadOnly Property Value As String

    Public Sub New(pType As String, pValue As String)
        Me.Type = pType
        Me.Value = pValue
    End Sub

    Public Overrides Function ToString() As String
        Return $"{{#{Type}#{Value}}}"
    End Function

    Public Overrides Function GetHashCode() As Integer
        Return (Value.GetHashCode & Type.GetHashCode).GetHashCode
    End Function

    Public Overrides Function Equals(obj As Object) As Boolean
        Return Me.GetHashCode = DirectCast(obj, Pattern).GetHashCode
    End Function
End Class
