packages feed

sarsi-0.0.5.1: src/Rosetta.hs

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"]