К основному контенту

Domain Model in F#

(*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.

Комментарии

Популярные сообщения из этого блога

Кирилица в Arch Linux

После вчерашних обновлений в консоли Arch Linux при выборе русской локали вместо букв печатаются белые квадратики. Очевидно, что по какой-то причине не загружается прописанный в rc.conf шрифт. Временное лекарство от этого: выполнить команду setfont cyr-sun16 . Еще у меня в момент начальной загрузки появляется рябь на экране как от сильных электромагнитных помех в ЭЛТ, хотя у меня ЖК. Может быть это как-то связано.

Сортировка массивов в groovy

Любой массив в java и groovy можно отсортировать статическим методом: Arrays.sort(c); причем это будет очень быстро сто тысяч элементов типа int сортируются за 1 секунду на celeron M 1,8 Mg. Если это массив объектов можно использовать перегруженный метод Arrays.sort(c,comporator);

Arch Linux - руссификация консоли

Вчера, придя с работы, как всегда затеял InstallFest. Уже практически не задумываясь установил свежий арч. И тут заметил что в tty вместо русского - квадратики. Под утро нашел таки сообщение на форме, что в этом виноваты дрова от видео. Там правда речь шла о нвидиа, а у меня ати. Буду пробовать. И еще в lxterminal обратил внимание что сообщения на русском, а то что я вводил на русском потом возвращается системой в виде юникод-символов. Вот такие дела. UPDATE: драйвер не причем. переустановил в консоли(до установки X) по прежнему квадратики вместо букв. неужели придется переключатся на инглиш? Заметил что initscripts скачался c какого-то зеркала не с яндекса. возможно причина в нем.