(*Domain Model in F#*) open System module Items = type ItemId = ItemId of string type Item = {Id:ItemId} let create id = {Id = ItemId id} module Boxes = open Items type BoxId = BoxId of string type Box = {Id: BoxId; Items : Item list} let create id = { Id = BoxId id; Items = [] } let addItem box item = {box with Items = box.Items @ [item]} let lines box = (*представление коробки /только чтение/*) let (BoxId id) = box.Id let head = sprintf "Корзина \"%s\" содержит:\n" id box.Items |> List.sort |> List.fold (fun s item -> let (ItemId id) = item.Id s + (sprintf "%s\n" id)) head [<EntryPoint>] let main argv = let box = Boxes.create "Желтая коробка" let box = Boxes.addItem box (Items.create "Колбаса") let box = Boxes.addItem box (Items.create "Яблоко") let box = Boxes.addItem box (Items.create "Сыр") let box = Boxes.addItem box (Items.create "Молоко") printfn "%s" (Boxes.lines box) 0 // return an integer exit code
Изучая F#, обратил внимание, на то, что требуется правильное мышление
для продуктивного использования этого языка. По максимуму нужно использовать ФП,
но не забывать и о том, что F# - мультипарадигменный и не стесняться использовать
библиотеки С#, стараясь избегать side effects и стремясь делать весь свой код pure.
Комментарии
Отправить комментарий