maybe monad를 실패 가능이라는 사이드 이펙트로 생각할 수도 있지만, 데이터 타입으로 보면 그냥 Nothing 이라는 값이 하나 추가된 타입일 뿐임. 모나드하고 사이드 이펙트가 본질적으로 연관되어 있지는 않음. - dc App
다믜(damhiya)2020-07-20 00:58
답글
그리고 버퍼를 비운다는것 자체가 사이드 이펙트임 - dc App
다믜(damhiya)2020-07-20 00:59
답글
??? 사이드이펙트가 그럼 뭐인거지? 출력을 제외한 모든 변화를 사이드이펙트라고 하는 건가?
익명(119.202)2020-07-20 01:00
답글
함수가 아닌건 모두 사이드 이펙트임 - dc App
다믜(damhiya)2020-07-20 01:00
답글
아 함수가 아닌 걸 다 사이드이펙트라고 하는구나.. 엥 근데 함수형 프로그래밍에서 함수가 아닌걸 어케 구현함.. 아 그래서 모나드를 쓰는 거구나.. 근데 입출력을 함수로는 진짜 못 만들어? 아키텍쳐가 절차형에 적합하게 돼있어서?
익명(119.202)2020-07-20 01:02
답글
하스켈 함수는 수학에서의 함수임. 입력값에 출력값을 대응시키는 것 외에는 아무 기능도 없음. - dc App
다믜(damhiya)2020-07-20 01:05
답글
그렇다고 모나드라는게 함수와는 다른, 사이드 이펙트를 사용하기 위해 만들어낸 이질적인 개념은 아니고, 함수로 사이드 이펙트를 다루는걸 간편하게 해주는 인터페이스일 뿐임 - dc App
다믜(damhiya)2020-07-20 01:07
답글
가령 State 모나드는 그냥 s -> (a, s) 를 사용하기 좋게 포장한거 - dc App
다믜(damhiya)2020-07-20 01:08
답글
IO 모나드는 하스켈 언어에 primitive하게 주어진 거긴 한데, 다르게 보자면 그냥 instruction이라고 볼 수도 있음.
하스켈 프로그램이 main 이라는 IO a 타입의 '값'을 주면 하스켈 런타임이 main에 적혀있는 IO 연산을 수행하는거 - dc App
다믜(damhiya)2020-07-20 01:12
내가 원하는 걸 변하게 하는 것도 이펙트임. 예를 들면 heap에 저장된 값
익명(202.150)2020-07-20 00:59
답글
그럼 출력 빼고는 다 사이드이펙트임?
익명(119.202)2020-07-20 01:00
답글
순수한 함수형 프로그램 입장에서는 순수한 계산 결과, 즉 함수가 반환하는 값 말고는 다 사이드 이펙트 취급하는 게 맞는듯. 하물며 계산이 안 끝나고 무한루프에 빠지게 되는 것도 이펙트임. 내가 알고 있는 게 맞다면.
익명(202.150)2020-07-20 01:02
답글
위의 설명 들으니 알겠다 ㅇㅅㅇ 글쿠나 그럼 힙에 뭐 넣는것도 함수로는 절대 구현를 못하는건가보네
익명(119.202)2020-07-20 01:02
답글
순수하게 하스켈 언어만 사용해서는 표현하기 어려운 게 맞겠지만, 하스켈 컴파일러 자체가 이런 이펙트를 다룰 수 있도록 하는 기능을 제공하는 셈 (틀릴 수도 잇음ㅎ). 이펙트를 발생시키는 연산을 모나드로 표현하면, 그걸 가지고 순수 하스켈 언어의 영역으로 끌고와서 다룰 수 있게 되는 식인 걸로 이해하고 있음
identity monad라고 아무 일도 하지 않는 모나드도 있음 - dc App
maybe monad를 실패 가능이라는 사이드 이펙트로 생각할 수도 있지만, 데이터 타입으로 보면 그냥 Nothing 이라는 값이 하나 추가된 타입일 뿐임. 모나드하고 사이드 이펙트가 본질적으로 연관되어 있지는 않음. - dc App
그리고 버퍼를 비운다는것 자체가 사이드 이펙트임 - dc App
??? 사이드이펙트가 그럼 뭐인거지? 출력을 제외한 모든 변화를 사이드이펙트라고 하는 건가?
함수가 아닌건 모두 사이드 이펙트임 - dc App
아 함수가 아닌 걸 다 사이드이펙트라고 하는구나.. 엥 근데 함수형 프로그래밍에서 함수가 아닌걸 어케 구현함.. 아 그래서 모나드를 쓰는 거구나.. 근데 입출력을 함수로는 진짜 못 만들어? 아키텍쳐가 절차형에 적합하게 돼있어서?
하스켈 함수는 수학에서의 함수임. 입력값에 출력값을 대응시키는 것 외에는 아무 기능도 없음. - dc App
그렇다고 모나드라는게 함수와는 다른, 사이드 이펙트를 사용하기 위해 만들어낸 이질적인 개념은 아니고, 함수로 사이드 이펙트를 다루는걸 간편하게 해주는 인터페이스일 뿐임 - dc App
가령 State 모나드는 그냥 s -> (a, s) 를 사용하기 좋게 포장한거 - dc App
IO 모나드는 하스켈 언어에 primitive하게 주어진 거긴 한데, 다르게 보자면 그냥 instruction이라고 볼 수도 있음. 하스켈 프로그램이 main 이라는 IO a 타입의 '값'을 주면 하스켈 런타임이 main에 적혀있는 IO 연산을 수행하는거 - dc App
내가 원하는 걸 변하게 하는 것도 이펙트임. 예를 들면 heap에 저장된 값
그럼 출력 빼고는 다 사이드이펙트임?
순수한 함수형 프로그램 입장에서는 순수한 계산 결과, 즉 함수가 반환하는 값 말고는 다 사이드 이펙트 취급하는 게 맞는듯. 하물며 계산이 안 끝나고 무한루프에 빠지게 되는 것도 이펙트임. 내가 알고 있는 게 맞다면.
위의 설명 들으니 알겠다 ㅇㅅㅇ 글쿠나 그럼 힙에 뭐 넣는것도 함수로는 절대 구현를 못하는건가보네
순수하게 하스켈 언어만 사용해서는 표현하기 어려운 게 맞겠지만, 하스켈 컴파일러 자체가 이런 이펙트를 다룰 수 있도록 하는 기능을 제공하는 셈 (틀릴 수도 잇음ㅎ). 이펙트를 발생시키는 연산을 모나드로 표현하면, 그걸 가지고 순수 하스켈 언어의 영역으로 끌고와서 다룰 수 있게 되는 식인 걸로 이해하고 있음
바꾸는 거
뭘 바꾸는거
위에 댓글 이어서 쓴 거임