module Cloudy.NameGen where import Data.Text (Text) import System.Random (randomRIO) nameWords :: [Text] nameWords :: [Text] nameWords = [ Text "able" , Text "account" , Text "acid" , Text "act" , Text "addition" , Text "adjustment" , Text "advertisement" , Text "agreement" , Text "air" , Text "amount" , Text "amusement" , Text "angle" , Text "angry" , Text "animal" , Text "answer" , Text "ant" , Text "apparatus" , Text "apple" , Text "approval" , Text "arch" , Text "argument" , Text "arm" , Text "army" , Text "art" , Text "attack" , Text "attempt" , Text "attention" , Text "attraction" , Text "authority" , Text "automatic" , Text "awake" , Text "baby" , Text "back" , Text "bad" , Text "bag" , Text "balance" , Text "ball" , Text "band" , Text "base" , Text "basin" , Text "basket" , Text "bath" , Text "beautiful" , Text "bed" , Text "bee" , Text "behaviour" , Text "belief" , Text "bell" , Text "bent" , Text "berry" , Text "bird" , Text "birth" , Text "bit" , Text "bite" , Text "bitter" , Text "black" , Text "blade" , Text "blood" , Text "blow" , Text "blue" , Text "board" , Text "boat" , Text "body" , Text "boiling" , Text "bone" , Text "book" , Text "boot" , Text "bottle" , Text "box" , Text "boy" , Text "brain" , Text "brake" , Text "branch" , Text "brass" , Text "bread" , Text "breath" , Text "brick" , Text "bridge" , Text "bright" , Text "broken" , Text "brother" , Text "brown" , Text "brush" , Text "bucket" , Text "building" , Text "bulb" , Text "burn" , Text "burst" , Text "business" , Text "butter" , Text "button" , Text "cake" , Text "camera" , Text "canvas" , Text "card" , Text "care" , Text "carriage" , Text "cart" , Text "cat" , Text "cause" , Text "certain" , Text "chain" , Text "chalk" , Text "chance" , Text "change" , Text "cheap" , Text "cheese" , Text "chemical" , Text "chest" , Text "chief" , Text "chin" , Text "church" , Text "circle" , Text "clean" , Text "clear" , Text "clock" , Text "cloth" , Text "cloud" , Text "coal" , Text "coat" , Text "cold" , Text "collar" , Text "colour" , Text "comb" , Text "comfort" , Text "committee" , Text "common" , Text "company" , Text "comparison" , Text "competition" , Text "complete" , Text "complex" , Text "condition" , Text "connection" , Text "conscious" , Text "control" , Text "cook" , Text "copper" , Text "copy" , Text "cord" , Text "cork" , Text "cotton" , Text "cough" , Text "country" , Text "cover" , Text "cow" , Text "crack" , Text "credit" , Text "crime" , Text "cruel" , Text "crush" , Text "cry" , Text "cup" , Text "current" , Text "curtain" , Text "curve" , Text "cushion" , Text "cut" , Text "damage" , Text "danger" , Text "dark" , Text "daughter" , Text "day" , Text "dead" , Text "dear" , Text "death" , Text "debt" , Text "decision" , Text "deep" , Text "degree" , Text "delicate" , Text "dependent" , Text "design" , Text "desire" , Text "destruction" , Text "detail" , Text "development" , Text "different" , Text "digestion" , Text "direction" , Text "dirty" , Text "discovery" , Text "discussion" , Text "disease" , Text "disgust" , Text "distance" , Text "distribution" , Text "division" , Text "dog" , Text "door" , Text "doubt" , Text "drain" , Text "drawer" , Text "dress" , Text "drink" , Text "driving" , Text "drop" , Text "dry" , Text "dust" , Text "ear" , Text "early" , Text "earth" , Text "edge" , Text "education" , Text "effect" , Text "egg" , Text "elastic" , Text "electric" , Text "end" , Text "engine" , Text "equal" , Text "error" , Text "event" , Text "example" , Text "exchange" , Text "existence" , Text "expansion" , Text "experience" , Text "expert" , Text "eye" , Text "face" , Text "fact" , Text "fall" , Text "false" , Text "family" , Text "farm" , Text "fat" , Text "father" , Text "fear" , Text "feather" , Text "feeble" , Text "feeling" , Text "female" , Text "fertile" , Text "fiction" , Text "field" , Text "fight" , Text "finger" , Text "fire" , Text "first" , Text "fish" , Text "fixed" , Text "flag" , Text "flame" , Text "flat" , Text "flight" , Text "floor" , Text "flower" , Text "fly" , Text "fold" , Text "food" , Text "foolish" , Text "foot" , Text "force" , Text "fork" , Text "form" , Text "fowl" , Text "frame" , Text "free" , Text "frequent" , Text "friend" , Text "front" , Text "fruit" , Text "full" , Text "future" , Text "garden" , Text "general" , Text "girl" , Text "glass" , Text "glove" , Text "goat" , Text "gold" , Text "good" , Text "government" , Text "grain" , Text "grass" , Text "great" , Text "green" , Text "grey" , Text "grip" , Text "group" , Text "growth" , Text "guide" , Text "gun" , Text "hair" , Text "hammer" , Text "hand" , Text "hanging" , Text "happy" , Text "harbour" , Text "hard" , Text "harmony" , Text "hat" , Text "hate" , Text "head" , Text "healthy" , Text "hearing" , Text "heart" , Text "heat" , Text "help" , Text "high" , Text "history" , Text "hole" , Text "hollow" , Text "hook" , Text "hope" , Text "horn" , Text "horse" , Text "hospital" , Text "hour" , Text "house" , Text "humour" , Text "ice" , Text "idea" , Text "ill" , Text "important" , Text "impulse" , Text "increase" , Text "industry" , Text "ink" , Text "insect" , Text "instrument" , Text "insurance" , Text "interest" , Text "invention" , Text "iron" , Text "island" , Text "jelly" , Text "jewel" , Text "join" , Text "journey" , Text "judge" , Text "jump" , Text "kettle" , Text "key" , Text "kick" , Text "kind" , Text "kiss" , Text "knee" , Text "knife" , Text "knot" , Text "knowledge" , Text "land" , Text "language" , Text "last" , Text "late" , Text "laugh" , Text "law" , Text "lead" , Text "leaf" , Text "learning" , Text "leather" , Text "left" , Text "leg" , Text "letter" , Text "level" , Text "library" , Text "lift" , Text "light" , Text "like" , Text "limit" , Text "line" , Text "linen" , Text "lip" , Text "liquid" , Text "list" , Text "living" , Text "lock" , Text "long" , Text "look" , Text "loose" , Text "loss" , Text "loud" , Text "love" , Text "low" , Text "machine" , Text "male" , Text "man" , Text "manager" , Text "map" , Text "mark" , Text "market" , Text "married" , Text "mass" , Text "match" , Text "material" , Text "meal" , Text "measure" , Text "meat" , Text "medical" , Text "meeting" , Text "memory" , Text "metal" , Text "middle" , Text "military" , Text "milk" , Text "mind" , Text "mine" , Text "minute" , Text "mist" , Text "mixed" , Text "money" , Text "monkey" , Text "month" , Text "moon" , Text "morning" , Text "mother" , Text "motion" , Text "mountain" , Text "mouth" , Text "move" , Text "muscle" , Text "music" , Text "nail" , Text "name" , Text "narrow" , Text "nation" , Text "natural" , Text "necessary" , Text "neck" , Text "need" , Text "needle" , Text "nerve" , Text "net" , Text "new" , Text "news" , Text "night" , Text "noise" , Text "normal" , Text "nose" , Text "note" , Text "number" , Text "nut" , Text "observation" , Text "offer" , Text "office" , Text "oil" , Text "old" , Text "open" , Text "operation" , Text "opinion" , Text "opposite" , Text "orange" , Text "order" , Text "organization" , Text "ornament" , Text "oven" , Text "owner" , Text "page" , Text "pain" , Text "paint" , Text "paper" , Text "parallel" , Text "parcel" , Text "part" , Text "past" , Text "paste" , Text "payment" , Text "peace" , Text "pen" , Text "pencil" , Text "person" , Text "physical" , Text "picture" , Text "pig" , Text "pin" , Text "pipe" , Text "place" , Text "plane" , Text "plant" , Text "plate" , Text "play" , Text "pleasure" , Text "plough" , Text "pocket" , Text "point" , Text "poison" , Text "polish" , Text "political" , Text "poor" , Text "porter" , Text "position" , Text "possible" , Text "pot" , Text "potato" , Text "powder" , Text "power" , Text "present" , Text "price" , Text "print" , Text "prison" , Text "private" , Text "probable" , Text "process" , Text "produce" , Text "profit" , Text "property" , Text "prose" , Text "protest" , Text "public" , Text "pull" , Text "pump" , Text "punishment" , Text "purpose" , Text "push" , Text "quality" , Text "question" , Text "quick" , Text "quiet" , Text "rail" , Text "rain" , Text "range" , Text "rat" , Text "rate" , Text "ray" , Text "reaction" , Text "reading" , Text "ready" , Text "reason" , Text "receipt" , Text "record" , Text "red" , Text "regret" , Text "regular" , Text "relation" , Text "religion" , Text "representative" , Text "request" , Text "respect" , Text "responsible" , Text "rest" , Text "reward" , Text "rhythm" , Text "rice" , Text "right" , Text "ring" , Text "river" , Text "road" , Text "rod" , Text "roll" , Text "roof" , Text "room" , Text "root" , Text "rough" , Text "round" , Text "rub" , Text "rule" , Text "run" , Text "sad" , Text "safe" , Text "sail" , Text "salt" , Text "same" , Text "sand" , Text "scale" , Text "school" , Text "science" , Text "scissors" , Text "screw" , Text "sea" , Text "seat" , Text "second" , Text "secret" , Text "secretary" , Text "seed" , Text "selection" , Text "self" , Text "sense" , Text "separate" , Text "serious" , Text "servant" , Text "shade" , Text "shake" , Text "shame" , Text "sharp" , Text "sheep" , Text "shelf" , Text "ship" , Text "shirt" , Text "shock" , Text "shoe" , Text "short" , Text "shut" , Text "side" , Text "sign" , Text "silk" , Text "silver" , Text "simple" , Text "sister" , Text "size" , Text "skin" , Text "skirt" , Text "sky" , Text "sleep" , Text "slip" , Text "slope" , Text "slow" , Text "small" , Text "smash" , Text "smell" , Text "smile" , Text "smoke" , Text "smooth" , Text "snake" , Text "sneeze" , Text "snow" , Text "soap" , Text "society" , Text "sock" , Text "soft" , Text "solid" , Text "son" , Text "song" , Text "sort" , Text "sound" , Text "soup" , Text "space" , Text "spade" , Text "special" , Text "sponge" , Text "spoon" , Text "spring" , Text "square" , Text "stage" , Text "stamp" , Text "star" , Text "start" , Text "statement" , Text "station" , Text "steam" , Text "steel" , Text "stem" , Text "step" , Text "stick" , Text "sticky" , Text "stiff" , Text "stitch" , Text "stocking" , Text "stomach" , Text "stone" , Text "stop" , Text "store" , Text "story" , Text "straight" , Text "strange" , Text "street" , Text "stretch" , Text "strong" , Text "structure" , Text "substance" , Text "sudden" , Text "sugar" , Text "suggestion" , Text "summer" , Text "sun" , Text "support" , Text "surprise" , Text "sweet" , Text "swim" , Text "system" , Text "table" , Text "tail" , Text "talk" , Text "tall" , Text "taste" , Text "tax" , Text "teaching" , Text "tendency" , Text "test" , Text "theory" , Text "thick" , Text "thin" , Text "thing" , Text "thought" , Text "thread" , Text "throat" , Text "thumb" , Text "thunder" , Text "ticket" , Text "tight" , Text "time" , Text "tin" , Text "tired" , Text "toe" , Text "tongue" , Text "tooth" , Text "top" , Text "touch" , Text "town" , Text "trade" , Text "train" , Text "transport" , Text "tray" , Text "tree" , Text "trick" , Text "trouble" , Text "trousers" , Text "true" , Text "turn" , Text "twist" , Text "umbrella" , Text "unit" , Text "use" , Text "value" , Text "verse" , Text "vessel" , Text "view" , Text "violent" , Text "voice" , Text "waiting" , Text "walk" , Text "wall" , Text "war" , Text "warm" , Text "wash" , Text "waste" , Text "watch" , Text "water" , Text "wave" , Text "wax" , Text "way" , Text "weather" , Text "week" , Text "weight" , Text "wet" , Text "wheel" , Text "whip" , Text "whistle" , Text "white" , Text "wide" , Text "wind" , Text "window" , Text "wine" , Text "wing" , Text "winter" , Text "wire" , Text "wise" , Text "woman" , Text "wood" , Text "wool" , Text "word" , Text "work" , Text "worm" , Text "wound" , Text "writing" , Text "wrong" , Text "year" , Text "yellow" , Text "young" ] randomName :: IO Text randomName :: IO Text randomName = do Int nameIdx <- (Int, Int) -> IO Int forall a (m :: * -> *). (Random a, MonadIO m) => (a, a) -> m a randomRIO (Int 0, [Text] -> Int forall a. [a] -> Int forall (t :: * -> *) a. Foldable t => t a -> Int length [Text] nameWords Int -> Int -> Int forall a. Num a => a -> a -> a - Int 1) Text -> IO Text forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure (Text -> IO Text) -> Text -> IO Text forall a b. (a -> b) -> a -> b $ [Text] nameWords [Text] -> Int -> Text forall a. HasCallStack => [a] -> Int -> a !! Int nameIdx instanceNameGen :: IO Text instanceNameGen :: IO Text instanceNameGen = do Text name1 <- IO Text randomName Text name2 <- IO Text randomName Text -> IO Text forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure (Text -> IO Text) -> Text -> IO Text forall a b. (a -> b) -> a -> b $ Text name1 Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text "-" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text name2