함수형 씹고수님덜 설명좀..
블로그 글들도 그냥 앞에 범주론이 어쩌고 하다가 결국 싸지른다는게 Just, Maybe 이정도임. 이건 이거 몰라도 너무 쉽게 해결이 가능한 영역이고.
범주론을 이해하면 프로그래밍에서 어떤 문제를 해결할 수 있는거임? 교환법칙 어쩌고하는데 너무 당연한 소리를 너무 어렵게 해놔서 결국 뭐에 적용할 수 있다는건지 감이 안온다.
함수형 씹고수님덜 설명좀..
블로그 글들도 그냥 앞에 범주론이 어쩌고 하다가 결국 싸지른다는게 Just, Maybe 이정도임. 이건 이거 몰라도 너무 쉽게 해결이 가능한 영역이고.
범주론을 이해하면 프로그래밍에서 어떤 문제를 해결할 수 있는거임? 교환법칙 어쩌고하는데 너무 당연한 소리를 너무 어렵게 해놔서 결국 뭐에 적용할 수 있다는건지 감이 안온다.
범주론 그딴거 몰라도됨 걍 실용적인 부분만 생각해보면 사이드이펙트 안생김, 테스트하기 쉬운코드, 쓰레드세이프, 널이나 익셉션 비동기 추상화 하는 가장 좋은 수단임, 널처리 트라이캐치 콜백 이런거 안쓰니 가독성 좋음 등등
ㅇㅎ 어떤 느낌인지 알겠네. 감사감사
여러 종류의 함수를 모나드라는 공통된 인터페이스로 묶어서 함수 색 문제 해결
함수 색이라는게 찾아보니까 어떤 사람은 비동기 동기 얘기하는데 주딱이 말하는건 액션 / 순수함수, 기타 파이프라인적인 분류 마즘?
예를 들어 니가 숫자 리스트를 값으로 가지는 해시맵에서 원하는 키를 가진 리스트를 가져오고, 그 리스트에서 특정 조건을 만족하는 값을 뽑고, 그 값으로 A타입의 객체의 리스트를 만들어서 리턴하는 함수를 만들고 싶어. 만족하는 값이 없으면 A의 디폴트 생성자로 만든걸 리턴해. 이걸 모나드 없이 처리 할려면 개 좆같은 코드가 나올텐데, 팡쇼날 하게 짜면 아래처럼 되는거임 hashmap.get(key).iter().filter(condition).map_or(A::default(), A::new).collect();
이게 왜 모나드?
map_or 이 bind라고 보면 됨
and_then이 bind지 그리고 그냥 고차함수를 이용해서 데이터를 파이프라이닝하는 예제로 모나드의 어떤 핵심 아이디어를 포착한 건지 알 수가 없어서 물어보는 거임
Maybe bind라고 볼수도 있지 머
아 이 체이닝이 모나드임? 그냥 함수를 체이닝 가능한 형태로 만들면 모나드라고 할 수 있는건가. 윗댓보니까 체이닝은 모나드 활용처 중 하나인거처럼 보이기도하고
ㄴ전혀 아니다..
이게 모나드! 라는게 아니라 모나드를 써서 뭘 할 수 있는지를 보여준거임. 모나드는 어떤 타입 T에 대해 of, map, flatten 연산이 가능한 뭐시기 하는 설명은 다 봤을테니 넘어가고, get(key)로 나온 maybe 모나드를 시작으로 함수 체이닝 응용을 보여준거임
모나드를 써서 뭘 한다고 했는데 이 예제에선 Maybe가 모나드가 아니어도 아무런 문제가 없음 Maybe가 모나드니 Maybe로 하는 모든 연산은 모나드라고 주장하고 싶은 거임?
글 제목 보셈
본문에 “Just, Maybe 이정도임. 이건 이거 몰라도 너무 쉽게 해결이 가능한 영역이고.”는 안읽음?
그러게 map 하는거 위주로 보여줬어야 하나
map은 functor인데?
함수형언어 안쓰면 쓸일 없다
모나드를 써서 뭐가 가능한게 문제가 아니라 순수 함수형은 애초에 모나드가 없으면 I/O 처리가 안됨
아무쓸모없다
IO, State 모나드 같은거 써보면 알텐데, 모나드가 프로그램의 행동을 표현하는 오브젝트 같이 추상화가 됨. 그러면 간단하게 IO 모나드 몇개 합쳐서 새로운 IO 모나드를 만들어서 그거 자체 (하스켈의 경우) 아니면 그 모나드를 실행시키는 코드를 짜서 (스칼라의 경우) 메인 함수로 하면 됨.