169 похожих чатов

Использование DU как гаранта последовательных шагов: module Steps =

module Counter =
type T(start) =
let mutable _counter = start
member _.count = _counter
member _.next() = _counter <- _counter + 1

type T =
// тип string у этих "шагов" не более, чем условность (чисто для удобства)
| START
| S1 of string
| S2 of string
| S3 of string
// ...
// | S30 of string
| FINISH
static member Length = typeof<T>
|> FSharp.Reflection.FSharpType.GetUnionCases
|> fun x -> x.Length

let check (a: Counter.T) b =
if a.count <> b then
failwith
<| $"\n\n[ERROR] check a b | a.count=%i{a.count} b=%i{b}\n"
else
a.next ()

let step cnt arg =
let check = check cnt

match arg with
| START -> check 0; arg
| S1 _ -> check 1; arg
| S2 _ -> check 2; arg
| S3 _ -> check 3; arg
| FINISH -> check <| T.Length - 1; arg

let test () =
let step = step <| Counter.T(0)
let echo x = printfn $"%A{x}"

echo << step <| START

echo "----------------------"
echo << step <| S1 "step 1"
//echo << step <| S1 "step 1" // error
//echo << step <| FINISH // error

echo "----------------------"
echo << step <| S2 "step 2"
//echo << step <| S2 "step 2" // error
//echo << step <| S1 "step 1" // error
//echo << step <| FINISH // error

echo "----------------------"
echo << step <| S3 "step 3"
//echo << step <| S3 "step 3" // error
//echo << step <| S2 "step 2" // error
//echo << step <| S1 "step 1" // error
//echo << step <| FINISH // error

echo "----------------------"
echo << step <| FINISH

Steps.test ()

а как-то поизящнее можно того же самого добиться?

5 ответов

35 просмотров
dd- Автор вопроса

а этот принтскрин для всех симулянтов, что попытаются огульно охаивать моё форматирование 🤣🤣🤣

dd
а этот принтскрин для всех симулянтов, что попытаю...

Могу констатировать, что рост есть, но также есть и пространство для дальнейшего роста

Попробуй почитать про state machine, мб придет вдохновение

dd- Автор вопроса
Denis Sudeev
Попробуй почитать про state machine, мб придет вдо...

тебе не кажется, что это из пушки по воробьям (в рамках указанной задачи) ??

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann ٩( 💢•̀ з•́)و Chapmann
19
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
22
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Карта сайта