diff options
Diffstat (limited to 'go/src/types')
| -rw-r--r-- | go/src/types/types.go | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/go/src/types/types.go b/go/src/types/types.go index 613bfb5..54e4176 100644 --- a/go/src/types/types.go +++ b/go/src/types/types.go @@ -4,6 +4,7 @@ import ( "reflect" "errors" "fmt" + "strings" ) // Errors/Exceptions @@ -21,10 +22,9 @@ type MalType interface { } type EnvType interface { - //Find(key string) *EnvType - Find(key string) EnvType - Set(key string, value MalType) MalType - Get(key string) (MalType, error) + Find(key Symbol) EnvType + Set(key Symbol, value MalType) MalType + Get(key Symbol) (MalType, error) } // Scalars @@ -57,6 +57,20 @@ func Symbol_Q(obj MalType) bool { } +// Keywords +func NewKeyword(s string) (MalType, error) { + return "\u029e" + s, nil; +} + +func Keyword_Q(obj MalType) bool { + if obj == nil { return false } + switch s := obj.(type) { + case string: return strings.HasPrefix(s, "\u029e") + default: return false + } +} + + // Strings func String_Q(obj MalType) bool { if obj == nil { return false } |
