본문 바로가기

프로그래밍 기술 노트

(85)
부분함수 (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급 시민으로..
[Monad] 시퀀스를 여행하는 모나드를 위한 안내서 제목이 저런 이유는 Sequence / Traverse 에 관한 내용이기 때문.. Sequence 개발을 하다가 보면 List 같은 형태의 Option/Result 가 필요한 경우가 생기게 된다. 실무에서 자주쓰는 대표적인 예시중에 다음 같은것이 있다. N 개의 URI 에 응답을 조합한다, N개중 1개라도 응답이 오지않으면 Fail 이다. MSA 에서 API Composition 할때나, FE 에서 Server 에 여러번 요청을 할때 등등.. 상당히 많이 쓰이는 로직이다. 간단하게 예시를 들어서 다음과 같다고 해보자, 편의를 위하여 가장 기본적인 Type만 사용하였다. 내 블로그에서 001~003 까지 결과를 알려주는 함수 MyBlog 를 짠다. 요청해야할 URI : ["see-ro-e.tistory.c..
[HKT] Value / Type / Kind 와 Higher Kinded Type (Feat. 고차함수) 시작 하기에 앞서서.. 함수도 값이라는것을 이해해야 한다. 고차함수란 개념 Order (일반적으로 차수) 란 일종의 단계이다 (Higher order function : 고차함수) 이차함수의 차수는 2 다 -> 이차함수의 order는 2다 예시는 Kotlin , 일부 Scala Value 의 세계 Value 와 타입 우리는 일반적으로 프로그래밍을 할때, Value(값) 를 다룬다, 이 Value 을 분류하는 방법을 Type 이라고 한다. val intValue : Int = 5 val doubleValue : Double = 5.0 val functionValue : (Int) -> Int = { x : Int -> x*2 } val highOrderFunctionValue : ((Int) -> Int)..
[Expression Problem] 객체 대수 (Object algebras) 와 Tagless Final [Expression Problem] 표현 문제란? [Expression Problem] Open classes , Protocol , 그리고 확장 메서드 [Expression Problem] Type classes [Expression Problem] Mutiple Dispatch (Feat Visitor / Multi Method) [Expression Problem] 객체 대수 (Object algebras) 와 Tagless Final -> 지금 여기 솔직히 말하면 먼소리는 모르겠는데, 일단 포스팅 이전 장에서 나온 Visitor pattern 의 고오오급 패턴? 같은건데 대수학 (algebra) 개념을 객체에 적용 했다고 보면 될 듯 하다. [해당 글] 을 기준으로, 함수형 예시로 매번나오는 E..