{-# LANGUAGE OverloadedStrings #-} import qualified Data.Text as T import qualified Data.Text.IO as T import qualified Data.Set as S import Data.List import Control.Monad stats :: [(T.Text, [T.Text])] stats = [ ("brn", ["appraise", "bombs", "chemistry", "craft", "hack", "locksmith", "medic", "persuade", "pilot", "repair", "science", "teach"]), ("sen", ["appraise", "dodge", "focus", "fuck", "scavenge", "sneak", "throw", "track", "whips"]), ("brw", ["clubs", "fists", "throw"]), ("refl", ["blades", "climb", "clubs", "dodge", "locksmith", "pilot", "pistols", "quickdraw", "rifles", "spears", "whips"]), ("end", ["climb", "fish", "fists", "focus", "fuck", "scavenge", "spears", "swim"]), ("col", ["blades", "bombs", "fish", "pistols", "quickdraw", "rifles", "sneak", "persuade"]) ] doubleValue :: S.Set T.Text doubleValue = S.fromList [ "chemistry", "craft", "hack", "medic", "repair", "science", "swim", "teach", "track" ] main :: IO () main = let skillSet = sortOn snd $ stats >>= (\(st, skills) -> map (\skill -> (st, skill)) skills) in forM_ skillSet $ \(stat, skill) -> let mup = if skill `S.member` doubleValue then "" else " * 0.5" in T.putStrLn $ " target_item.total_skills.entry(SkillType::" <> (T.toTitle skill) <> ")\n\ \ .and_modify(|sk| *sk += " <> stat <> mup <> ").or_insert(brn" <> mup <> ");"