본문 바로가기

프로그래밍 기술 노트

(88)
[Monad] 내멋대로 Monad 이해하기 - Kleisli🐟 모나드 다 제끼고, 아래와 같은 함수가 있다고 하자type User = {id:int}let nonSafeParse (str:string) = match Int32.TryParse str with | true, value -> value | _ -> raise (ArgumentException("Invalid input"))let nonSafeCreateUser (id:int) = if id = 0 then raise (ArgumentException("Invalid input")) else {id=id}let nonSafeParseAndCreateUser = nonSafeParse >> nonSafeCreateUserlet nonSafeWay1 = "1" |> n..
[DB] 현재는 모든 과거의 필연적인 산물이다 - Bitemporal 을 곁들인 타임머신 현재는 모든 과거의 필연적인 산물이다  Block Chain은 일종의 불변 + 분산 데이터베이스로 간주될 수 있다.이러한 불변성이 적용된 데이터베이스 시스템도 있는데, 이를 불변(immutable) 데이터베이스라고 한다.Datomic을 예로 들 수 있다.Datomic - Overview   Datomic - OverviewNever Forget Critical insights come from knowing the full story of your data, not just the most recent state. Datomic stores a record of immutable facts, which gives your applications strong consistency combined with ..
AppSync Subscription Data Field가 DB 에는 있지만, null 로 오는 경우 (Feat GraphQL) 그래프ql (AWS AppSync) 에서 에서 저장된 데이터를 실시간으로 땡겨오기 위하여 Subscription 을 사용 할 수 있는데띠용 분명히 DB 에는 데이터가 있는데, Subscription 하니까 특정 field 가 null 로 오는 경우가 발생..무엇이 문제인고 하니..Event fields - Real-time data with subscriptions - Building GraphQL APIs with AWS AppSync (graphql-on-aws-appsync-book.com)  AppSync only fills the subscription events with the fields that the mutation defined.  AppSync 는 (다른 그래프ql 은 몰?루) mu..
부분함수 (Currying) 에서 Generic 유지하기 in Kotlin / F# 함수형 패러다임에서는 OOP Style 로 변수들을 모아두는 대신, closure 캡쳐식으로 유지하는데, 보통 Currying 이 자동으로 적용되서, 부분함수를 쉽게 만들수 있다. let add (a: int) (b: int) = a + b let addOne = add 1 let result = addOne 2 parameter 2개를 받는 함수 add 에 파라미터를 한개만 넣으면, 자동으로 해당 값은 캡쳐되고 파라미터 한개를 받는 함수 (부분적 으로 적용된 함수 -> 즉 부분 함수 PartialFunction이다 ) 그리고 이렇게 걍 파라미터를 들 적으면 알아서 부분함수가 되는게 Currying 이라고 한다. Kotlin 은 어디까지나 기본 철학은 OOP 위에 쌓여있는 언어이기 때문에 Currying..
[Algebraic Effect] 내 멋대로 대수적 효과 이해하기 feat Continuation [Effect 가 싫어요]Functional Programming 에서는 효과(== 사이드 이펙트) 를 분리해서 Monad 로 순수하게 디자인하는 패턴이 아주 흔하다,Haskell 의 IO 모나드가 가장 대표적인 예시 인데, 이런 "모나딕" 한 방식이 아니지만, 효과를 분리해서 처리하는 다른 디자인중에 하나가 Algebraic Effect [대수적 효과] 이다 이번에 Epic Games 에서 Verse 라는 언어를 발표했는데 이 언어는 Effect 를 Monadic 이 아닌 Effect system 으로 처리한다고 하는데, 정확한 내용은 안나왔지만 아마 Algebraic Effect 방식으로 추측된다.Algebraic Effect 을 기반으로 설계된 언어는 Eff ,  Unison 등이 있고 보면 알수있..
[함수형 미세 팁] 파라미터 3개 이상의 Function 으 로 Reduce 하기 reduce / fold 는 함수형 프로그래밍의 hello world 같은 존재로 요즘에는 뭐 워낙 많이쓰기 때문에 자세한 설명이 필요없겠지만 간단하게 도식화 하자면 다음과 같다 위 예시는 [1 2 3 4 5 6 7] 의 시퀀스에 + 로 reduce 돌린 결과다. reduce 는 다루기 위험한 index 기반 for문의 아주 휼륭한 대체제로, 단순히 값을 계산해 내는 방법부터, reduce 로 ListA 에서 ListB 로 변환 (map) / ListA 에서 특정 추출 (filter) 도 reduce / fold 함수로 구현할수있다. (즉 List[A] 를 reduce 한다고 A 가 나오는건 아니라는거) 뭐 이게 중요한게 아니고 위와 같이 동작하다보니, reduce 에서 받는 함수는 기본적으로 F(X,Y..
[liftIO] 빠르게 올리는 함수형 컨퍼런스 liftIO 2022 후기 liftIO 2022 | Festa! liftIO 2022 | Festa! Festa에서 당신이 찾는 이벤트를 만나보세요. festa.io 작년에 이어 liftIO 가 올해도 개최되었다. 작년과 다르게 Offline 이라는점 우리같은 힙스터 함슬람에게 그린랩스 Dev 와 liftIO 는 몇 안되는 컨퍼런스이기 때문에 이번에도 참석하게 되었다. 참고로 [liftIO] 함수형 컨퍼런스 liftIO 후기 (tistory.com) 이건 liftIO 2021 후기 저번에 받은 lift IO 티셔츠를 입고갔다가 주최자분이 알아봐 주셔서 잠시나마 네트워킹 시간도 가졌다. 구조적 귀납증명 / PBT / TypeClass / Haskell DSL(?) / Elixir ... 등등 유용한 세션이 있었고 개인적으로는 1. ..
Delimited Continuations 가 대체 뭔데? 본 포스팅은 후속문 자체의 정의와 설명에 관한 내용이 아니므로 후속문의 개념은 너무나도 잘 쓰여진 아래 링크 참조 (거의 유일한 한글자료이자 아주 상세하게 쓰여진 자료) Computat ergo est: 후속문(Continuation) : 제1부. 개념과 call/cc (guruma.github.io) Delimited Continuations 이 무엇인지 파악하기 위하여 Continuations(후속문) 을 개념적인 Level 에서 훑어 보자 CPS (Continuations Passing Style) 흔히 callback 이라고 부르는 방식이다. Continuations (후속 작업을) Passing(넘기는) Style(스타일) First-Class Continuation 후속문 자체를 1급 시민으로..