Created
August 12, 2018 09:27
-
-
Save mvaldesdeleon/2a1072107ce51840f817575ad2be0c47 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// getEmptyPlate :: IxBurgerBuilder Ready EmptyPlate BurgerSpec | |
// getEmptyPlate = IxBurgerBuilder mempty | |
const getEmptyPlate = new IxBurgerBuilder<Ready, EmptyPlate, BurgerSpec>([]); | |
// addIngredient :: forall i o. String -> BurgerSpec -> IxBurgerBuilder i o (BurgerSpec) | |
// addIngredient x xs = IxBurgerBuilder $ Ingredient x : xs | |
const addIngredient = <I, O>(s: string) => (spec: BurgerSpec) => new IxBurgerBuilder<I ,O, BurgerSpec>(spec.concat([s])); | |
// -- ADDING THE BUN | |
// placeEmptyBun :: BurgerSpec -> IxBurgerBuilder EmptyPlate BottomBunOn BurgerSpec | |
// placeEmptyBun = addIngredient "Bottom Bun" | |
const placeEmptyBun = addIngredient<EmptyPlate, BottomBunOn> ("Bottom Bun") | |
// -- ADD SOME SAUCES DIRECTLY ON THE BOTTOM BUN | |
// addKetchup :: BurgerSpec -> IxBurgerBuilder BottomBunOn BottomBunOn BurgerSpec | |
// addKetchup = addIngredient "Ketchup" | |
const addKetchup = addIngredient<BottomBunOn, BottomBunOn> ("Ketchup") | |
const addMayo = addIngredient<BottomBunOn, BottomBunOn> ("Mayo") | |
const addMustard = addIngredient<BottomBunOn, BottomBunOn> ("Mustard") | |
// -- PUT THE PATTY ON, NO MORE SAUCES | |
// addPatty :: BurgerSpec -> IxBurgerBuilder BottomBunOn PattyOn BurgerSpec | |
// addPatty = addIngredient "Patty" | |
const addPatty = addIngredient<BottomBunOn, PattyOn> ("Patty") | |
// -- NEXT IS THE CHEESE, OR NONE | |
// addCheese :: BurgerSpec -> IxBurgerBuilder PattyOn CheeseOn BurgerSpec | |
// addCheese = addIngredient "Cheese" | |
const addCheese = addIngredient<PattyOn, CheeseOn> ("Cheese") | |
// noCheese :: BurgerSpec -> IxBurgerBuilder PattyOn CheeseOn BurgerSpec | |
// noCheese = IxBurgerBuilder | |
const noCheese = (spec: BurgerSpec) => new IxBurgerBuilder<PattyOn, CheeseOn, BurgerSpec>(spec); | |
// addOnions :: BurgerSpec -> IxBurgerBuilder CheeseOn OnionOn BurgerSpec | |
// addOnions = addIngredient "Onion" | |
const addOnions = addIngredient<CheeseOn, OnionOn> ("Onion") | |
// noOnions :: BurgerSpec -> IxBurgerBuilder CheeseOn OnionOn BurgerSpec | |
// noOnions = IxBurgerBuilder | |
const noOnions = (spec: BurgerSpec) => new IxBurgerBuilder<CheeseOn, OnionOn, BurgerSpec>(spec); | |
// -- THEN LETTUCE, OR NONE | |
// addLettuce :: BurgerSpec -> IxBurgerBuilder OnionOn LettuceOn BurgerSpec | |
// addLettuce = addIngredient "Lettuce" | |
const addLettuce = addIngredient<OnionOn, LettuceOn> ("Lettuce") | |
// noLettuce :: BurgerSpec -> IxBurgerBuilder OnionOn LettuceOn BurgerSpec | |
// noLettuce = IxBurgerBuilder | |
const noLettuce = (spec: BurgerSpec) => new IxBurgerBuilder<OnionOn, LettuceOn, BurgerSpec>(spec); | |
// -- THEN TOMATO, OR NONE | |
// addTomato :: BurgerSpec -> IxBurgerBuilder LettuceOn TomatoOn BurgerSpec | |
// addTomato = addIngredient "Tomato" | |
const addTomato = addIngredient<LettuceOn, TomatoOn> ("Tomato") | |
// noTomato :: BurgerSpec -> IxBurgerBuilder LettuceOn TomatoOn BurgerSpec | |
// noTomato = IxBurgerBuilder | |
const noTomato = (spec: BurgerSpec) => new IxBurgerBuilder<LettuceOn, TomatoOn, BurgerSpec>(spec); | |
// -- THEN FINISH THE BURGER WITH THE TOP BUN | |
// addTopBun :: BurgerSpec -> IxBurgerBuilder TomatoOn TopBunOn BurgerSpec | |
// addTopBun = addIngredient "TopBun" | |
const addTopBun = addIngredient<TomatoOn, TopBunOn> ("TopBun") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment