Skip to content

Instantly share code, notes, and snippets.

View Szer's full-sized avatar

Ayrat Hudaygulov Szer

View GitHub Profile
@Szer
Szer / stream.rkt
Created November 14, 2018 11:56
stream.rkt
#lang racket
(define empty-stream
(lambda () null))
;явно заворачиваем в лямбду
(define (stream-cons x xs)
(lambda () (cons x xs)))
(define (stream-empty? xs)
@Szer
Szer / hw3.rkt
Last active November 15, 2018 14:08
Racket try :D
#lang racket
(require racket/match)
(provide (all-defined-out))
(define (list-nth xs n)
(if (= n 0)
(car xs)
(list-nth (cdr xs) (- n 1))))
@Szer
Szer / api.fs
Created November 16, 2018 10:31
module Api.App
open System
open System.IO
open Microsoft.AspNetCore.Builder
open Microsoft.AspNetCore.Cors.Infrastructure
open Microsoft.AspNetCore.Hosting
open Microsoft.Extensions.Logging
open Microsoft.Extensions.DependencyInjection
open Giraffe
@Szer
Szer / enum-like-converter.fs
Last active August 10, 2021 05:40
Option converter for Newtonsoft.Json
[<AutoOpen>]
module EnumLikeDuConverter =
open Newtonsoft.Json
open Microsoft.FSharp.Reflection
open System.Collections.Concurrent
open Newtonsoft.Json.Linq
/// see `enumLikeDuConverter`
type EnumLikeDuConverter() =
open Microsoft.FSharp.Quotations.Patterns
open System.Reflection
let nullTraverse<'a> (expr: Quotations.Expr<'a>) (originObj : obj) : 'a option =
let inline tryGet (p : PropertyInfo) o =
p.GetMethod.Invoke(o,null)
|> Option.ofObj
let rec innerTraverse (nullableObj : obj) = function
| PropertyGet(None, props, _) -> tryGet props obj
type optionBuilder() =
member __.Bind(opt, f) = Option.bind f opt
member __.Bind(obj, f) = Option.bind f (Option.ofObj obj)
member __.Bind(obj, f) = Option.bind f (Option.ofObj (box obj))
member __.Bind(obj, f) = Option.bind f (Option.ofNullable obj)
member __.Return x = Some x
member __.ReturnFrom x = x
let option = optionBuilder()
module Cardone.Backoffice.ImageSearch.Extensions.Installers
open Microsoft.Extensions.DependencyInjection
open Microsoft.AspNetCore.Mvc
open Newtonsoft.Json.Serialization
open Newtonsoft.Json
open Newtonsoft.Json.Converters
open Microsoft.AspNetCore.Routing
open System.IO
open Microsoft.AspNetCore.DataProtection
@Szer
Szer / some.fs
Created December 11, 2018 15:13
module Infrastructure.Web.Api.Mvc
open Microsoft.AspNetCore.Mvc.Filters
open Microsoft.Extensions.Logging
open Infrastructure.Web.Api.Localization
open System
open Microsoft.AspNetCore.Mvc
let (|NotNull|) name = function
| null -> nullArg name
| o -> o
open FSharpPlus
let inline (^) f x = f x
let processUpdate context =
context.Update.Message
|> Option.iter ^fun message ->
message.Entities
|> Option.filter ^Seq.exists ^fun x -> x.Type = "url"
|> Option.iter ^fun _ ->
@Szer
Szer / pool.fs
Created February 4, 2019 15:23
Pool of works
open Hopac
open Hopac.Infixes
open Hopac.Stream
/// This is concurrent pool of workers with constant `degree` of parallelism
///
/// Used in `Hopac.Stream.mapPipelinedJob` as temporary workaround before [this](https://github.com/Hopac/Hopac/pull/186) will be released
type Pool<'i,'o>(worker: 'i -> Job<'o>, degree) =
let inputCh, degreeCh, doneCh = Ch(), Ch(), Ch()