Functional Programming(10)
-
Monad
모나드는 Flatten이 되는 Functor 이다. 지금까지 우리가 여러가지 개념을 배웠고 그러면서 이전시간 까지 Functor 에 대해 배웠다 그리고 Functor 중 몇몇을 예로 들어 설명하였다. Monad 는 Flatten 이 되는 Functor 이다. 이것이 monad 의 개념이다. 우리가 Flatten 이 무엇이지 Functor 가 무엇인지 모른다면 이 개념처럼 모호한 개념이 없다. Flatten List ==> Flatten ==> List Functor 사용자가 맵핑 할 수있는 데이터 타입 내부의 값에 함수를 적용하는 인터페이스가 있는 컨테이너 “mappable” 한 무언가 물론 그 안에는 더 많은 개념이 있다. 하지만 기본적인 정의는 위와 같이 표현할 수 있다. Flatten 은 말로 표현..
2022.11.21 -
Contravariant Functor, Profunctor
Contravariant Functor 화살표의 방향이 반대가 되는 Functor 입력과 출력이 반대가 되는 Functor이다. 반공변 Functor 라고 할 수 있다. Hashkell 에서는 다음과 같이 정의 한다. contramap :: Contravariant f => (b -> a) -> f a -> f b C# 은 아래와 같은 형태 이다. public Contravariant ContraMap(Func selector) C# 에서 covariant functor (일반 Functor) // Covariance. IEnumerable strings = new List(); // An object that is instantiated with a more derived type argument //..
2022.11.14 -
ApplicativeFunctor, BiFunctor
참고 : https://blog.ploeh.dk/2018/03/19/functors-applicatives-and-friends/ Applicative Functor 일반적인 Functor (fmap) 가 하나의 argument 를 가지고 사용 되는 Functor 라면 Applicative Functor 은 두개의 argument 를 가지고 fmap 하려는 경우 사용 하는 Functor 이다. 이항 연산을 예로 들면 두개의 인자를 받아야 하는데 fmap 같은 경우는 하나의 인자만 받을수 있으니 이것이 힘들다 그래서 이 함수 자체를 감싼 Functor 를 만들어 사용하면 해결 된다. add(left)(right) = left + right map(add)([1,2,3]) -- [ add(1), -- add..
2022.11.07 -
Functor
참고 : https://bartoszmilewski.com/2015/01/20/functors/ functor는 두 범주 간의 매핑이다. 펑터는 객체뿐만 아니라 객체 간의 기능(모피즘이라고 함)도 매핑한다. 예를 들어, 펑터 F는 카테고리 C와 D 사이의 매핑일 수 있다. f :: a -> b F f :: F a -> F b 위 코드를 그림으로 표현하면 아래와 같다. functor는 카테고리들 사이의 맵핑이기 때문에, functor는 항등과 합성을 지원해야 한다. 이 두가지는 functor의 법칙으로 알려져 있다. 합성을 지원하는 예) h = g . f F h = F g . F f 이것도 그림으로 표현하면... 항등을 지원하는 예) 즉 functor 는 범주의 구조를 유지해야 한다. Category 에서..
2022.10.31 -
Product and CoProduct
참고 : https://bartoszmilewski.com/2015/01/07/products-and-coproducts/ 범주에서 특정 개체를 선택하려면 다른 개체(및 자체)와의 관계 패턴을 설명해야만 이 작업을 수행할 수 있다. 이러한 관계는 모피즘에 의해 정의된다. 범주 이론에는 대상을 관계 측면에서 정의하기 위한 Common Construction 이라고 하는 Universal Construction 이 있다. 이를 수행하는 한 가지 방법은 개체와 모피즘으로 구성된 특정 모양인 패턴을 선택하고 범주에서 모든 항목을 찾는 것이다. 이러한 항목 사이에 우선 순위를 설정하고 가장 적합한 것을 선택 하는 것이다. 이 과정은 우리가 웹 검색을 하는 방식을 연상시킨다. 쿼리를 던지고 나온 결과에서 몇몇을 선..
2022.10.24 -
Kleisli Catogories
참조 : https://bartoszmilewski.com/2014/12/23/kleisli-categories/ 실행 내역을 기록하거나 추적하는 함수를 예로 들어 보자. 즉 로깅을 구현하다고 해보자. private string _logger; public bool Not(bool value) { _logger += $"Not {value}"; return !value; } member 변수 (전역) _logger 의 변경으로 인하여 이것은 부작용이 있고 그렇기 때문에 순수함수가 아니다. Concurrency 의 복잡성 때문에 전역 변경 상태를 피해야 한다. 이것을 순수하게 만들어 보자 public (bool Result, string Logger) Not(bool value, string logger)..
2022.10.17