diff --git a/README.md b/README.md index 5ccc97e..fddac64 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,12 @@ tricu decode [OPTIONS] Defaults to stdin. ``` +## Collaborating + +I am happy to accept issue reports, pull requests, or questions about tricu [via email](mailto:james@eversole.co). + +If you want to collaborate but don't want to email back-and-forth, please reach out via email once to let me know and I will provision a git.eversole.co account for you. + ## Acknowledgements Tree Calculus was discovered by [Barry Jay](https://github.com/barry-jay-personal/blog). diff --git a/src/Lexer.hs b/src/Lexer.hs index 53426d4..14e1ee4 100644 --- a/src/Lexer.hs +++ b/src/Lexer.hs @@ -3,6 +3,7 @@ module Lexer where import Research import Control.Monad (void) +import Data.Functor (($>)) import Data.Void import Text.Megaparsec import Text.Megaparsec.Char hiding (space) @@ -54,7 +55,7 @@ lexTricu input = case runParser tricuLexer "" input of keywordT :: Lexer LToken -keywordT = string "t" *> notFollowedBy alphaNumChar *> pure LKeywordT +keywordT = string "t" *> notFollowedBy alphaNumChar $> LKeywordT identifier :: Lexer LToken identifier = do @@ -63,7 +64,7 @@ identifier = do <|> digitChar <|> char '_' <|> char '-' <|> char '?' <|> char '$' <|> char '#' <|> char '@' <|> char '%' let name = first : rest - if (name == "t" || name == "!result") + if name == "t" || name == "!result" then fail "Keywords (`t`, `!result`) cannot be used as an identifier" else return (LIdentifier name) @@ -76,7 +77,7 @@ namespace = do return (LNamespace name) dot :: Lexer LToken -dot = char '.' *> pure LDot +dot = char '.' $> LDot lImport :: Lexer LToken lImport = do @@ -88,28 +89,28 @@ lImport = do return (LImport path name) assign :: Lexer LToken -assign = char '=' *> pure LAssign +assign = char '=' $> LAssign colon :: Lexer LToken -colon = char ':' *> pure LColon +colon = char ':' $> LColon backslash :: Lexer LToken -backslash = char '\\' *> pure LBackslash +backslash = char '\\' $> LBackslash openParen :: Lexer LToken -openParen = char '(' *> pure LOpenParen +openParen = char '(' $> LOpenParen closeParen :: Lexer LToken -closeParen = char ')' *> pure LCloseParen +closeParen = char ')' $> LCloseParen openBracket :: Lexer LToken -openBracket = char '[' *> pure LOpenBracket +openBracket = char '[' $> LOpenBracket closeBracket :: Lexer LToken -closeBracket = char ']' *> pure LCloseBracket +closeBracket = char ']' $> LCloseBracket lnewline :: Lexer LToken -lnewline = char '\n' *> pure LNewline +lnewline = char '\n' $> LNewline sc :: Lexer () sc = space diff --git a/src/Parser.hs b/src/Parser.hs index 5643490..ba9a7de 100644 --- a/src/Parser.hs +++ b/src/Parser.hs @@ -3,12 +3,12 @@ module Parser where import Lexer import Research -import Control.Monad (void) +import Control.Monad (void) import Control.Monad.State -import Data.List.NonEmpty (toList) -import Data.Void (Void) +import Data.List.NonEmpty (toList) +import Data.Void (Void) import Text.Megaparsec -import Text.Megaparsec.Error (ParseErrorBundle, errorBundlePretty) +import Text.Megaparsec.Error (ParseErrorBundle, errorBundlePretty) import qualified Data.Set as Set data PState = PState diff --git a/src/Research.hs b/src/Research.hs index 8f74e97..23371ce 100644 --- a/src/Research.hs +++ b/src/Research.hs @@ -1,6 +1,5 @@ module Research where -import Control.Monad.State import Data.List (intercalate) import Data.Map (Map) import Data.Text (Text, replace)