module Rosetta where import Data.List (find) fromExtension :: String -> Maybe LanguageTag fromExtension ext = find (\t -> languageExtension t == ext) languageTags fromTool :: String -> Maybe ProjectTag fromTool tool = find (\t -> projectTool t == tool) projectTags data LanguageTag = CS | FS | HS | JV | NX | RS | SC deriving (Bounded, Enum, Eq, Ord) languageExtension :: LanguageTag -> String languageExtension CS = "cs" languageExtension FS = "fs" languageExtension HS = "hs" languageExtension JV = "java" languageExtension NX = "nix" languageExtension RS = "rs" languageExtension SC = "scala" languageTags :: [LanguageTag] languageTags = [minBound ..] languageLabel :: LanguageTag -> String languageLabel CS = "csharp" languageLabel FS = "fsharp" languageLabel HS = "haskell" languageLabel JV = "java" languageLabel NX = "nix" languageLabel RS = "rust" languageLabel SC = "scala" data ProjectTag = CABAL | CARGO | DOTNET | NIX | SBT | STACK deriving (Bounded, Enum, Eq, Ord) projectTags :: [ProjectTag] projectTags = [minBound ..] projectLanguages :: ProjectTag -> [LanguageTag] projectLanguages CABAL = [HS] projectLanguages CARGO = [RS] projectLanguages DOTNET = [CS, FS] projectLanguages NIX = [NX] projectLanguages SBT = [JV, SC] projectLanguages STACK = [HS] projectTool :: ProjectTag -> String projectTool CABAL = "cabal" projectTool CARGO = "cargo" projectTool DOTNET = "dotnet" projectTool NIX = "nix-shell" projectTool SBT = "sbt" projectTool STACK = "stack" projectToolBuildArgs :: ProjectTag -> [String] projectToolBuildArgs NIX = ["."] projectToolBuildArgs SBT = ["compile"] projectToolBuildArgs _ = ["build"]