// Copyright (c) 2023 IBM Corp. // All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mostlyadequate import ( "context" "fmt" "net/http" R "github.com/IBM/fp-go/context/readerioeither" H "github.com/IBM/fp-go/context/readerioeither/http" F "github.com/IBM/fp-go/function" IOO "github.com/IBM/fp-go/iooption" N "github.com/IBM/fp-go/number" O "github.com/IBM/fp-go/option" M "github.com/IBM/fp-go/record" T "github.com/IBM/fp-go/tuple" ) type ( PostItem struct { UserId uint `json:"userId"` Id uint `json:"id"` Title string `json:"title"` Body string `json:"body"` } Player struct { Id int Name string } LocalStorage = map[string]Player ) var ( playerAlbert = Player{ Id: 1, Name: "Albert", } playerTheresa = Player{ Id: 2, Name: "Theresa", } localStorage = LocalStorage{ "player1": playerAlbert, "player2": playerTheresa, } // getFromCache :: String -> IO User getFromCache = func(name string) IOO.IOOption[Player] { return func() O.Option[Player] { return M.MonadLookup(localStorage, name) } } // game :: User -> User -> String game = F.Curry2(func(a, b Player) string { return fmt.Sprintf("%s vs %s", a.Name, b.Name) }) ) func (player Player) getName() string { return player.Name } func (player Player) getId() int { return player.Id } func (item PostItem) getTitle() string { return item.Title } func idxToUrl(idx int) string { return fmt.Sprintf("https://jsonplaceholder.typicode.com/posts/%d", idx+1) } func renderString(destinations string) func(string) string { return func(events string) string { return fmt.Sprintf("