I got the following solution for the old exam task:
Code: Alles auswählen
lazy val linLin: Linearization[LinResult] =
Lin("DoubleCheeseSalamiPizza") ===
Lin("DoubleCheeseSalamiPizza", >>(Lin("Cheese"), >>(Lin("Salami"), Lin("MargheritaPizza")))) ===
Lin("DoubleCheeseSalamiPizza", >>(Lin("Cheese", Lin("Pizza")), >>(Lin("Salami"), Lin("MargheritaPizza")))) ===
Lin("DoubleCheeseSalamiPizza", >>(Lin("Cheese", LinResult("Pizza", "AnyRef", "Any")), >>(Lin("Salami"), Lin("MargheritaPizza")))) ===
Lin("DoubleCheeseSalamiPizza", >>(LinResult("Cheese", "Pizza", "AnyRef", "Any"), >>(Lin("Salami"), Lin("MargheritaPizza")))) ===
Lin("DoubleCheeseSalamiPizza", >>(LinResult("Cheese", "Pizza", "AnyRef", "Any"), >>(Lin("Salami", LinResult("Pizza")), Lin("MargheritaPizza")))) ===
Lin("DoubleCheeseSalamiPizza", >>(LinResult("Cheese", "Pizza", "AnyRef", "Any"), >>(LinResult("Salami", "Pizza", "AnyRef", "Any"), Lin("MargheritaPizza")))) ===
Lin("DoubleCheeseSalamiPizza", >>(LinResult("Cheese", "Pizza", "AnyRef", "Any"), >>(LinResult("Salami", "Pizza", "AnyRef", "Any"), Lin("MargheritaPizza", >>(Lin("Cheese"), Lin("BasePizza")))))) ===
Lin("DoubleCheeseSalamiPizza", >>(LinResult("Cheese", "Pizza", "AnyRef", "Any"), >>(LinResult("Salami", "Pizza", "AnyRef", "Any"), Lin("MargheritaPizza", >>(LinResult("Cheese", "Pizza", "AnyRef", "Any"), Lin("BasePizza")))))) ===
Lin("DoubleCheeseSalamiPizza", >>(LinResult("Cheese", "Pizza", "AnyRef", "Any"), >>(LinResult("Salami", "Pizza", "AnyRef", "Any"), Lin("MargheritaPizza", >>(LinResult("Cheese", "Pizza", "AnyRef", "Any"), LinResult("BasePizza", "Pizza", "AnyRef", "Any")))))) ===
Lin("DoubleCheeseSalamiPizza", >>(LinResult("Cheese", "Pizza", "AnyRef", "Any"), >>(LinResult("Salami", "Pizza", "AnyRef", "Any"), LinResult("MargheritaPizza", "Cheese", "BasePizza", "Pizza", "AnyRef", "Any")))) ===
Lin("DoubleCheeseSalamiPizza", >>(LinResult("Cheese", "Pizza", "AnyRef", "Any"), LinResult("Salami", "MargheritaPizza", "Cheese", "BasePizza", "Pizza", "AnyRef", "Any"))) ===
Lin("DoubleCheeseSalamiPizza", LinResult("Salami", "MargheritaPizza", "Cheese", "BasePizza", "Pizza", "AnyRef", "Any")) ===
LinResult("DoubleCheeseSalamiPizza", "Salami", "MargheritaPizza", "Cheese", "BasePizza", "Pizza", "AnyRef", "Any")