모나드 없이 효과 다루기: 비결정성 DSL을 메타 언어에 삽입하기

모나드 없이 효과 다루기: 비결정성 DSL을 메타 언어에 삽입하기
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

본 논문은 복잡한 효과를 다루기 위해 모나드 대신 첫 번째 단계의 효과 전용 DSL을 설계하고, 이를 OCaml 같은 메타 언어에 태그리스-파이널 방식으로 삽입한다. 비결정성(선택·실패·커밋 선택) 예제로 리스트 순열을 구현하고, 인터프리터, 추상 해석, 코드 생성 등 비표준 해석을 동시에 제공한다. DSL은 문제 특화이며 일반적인 모나드와는 달리 함수형 추상화가 없지만, 확장성과 재사용성을 확보한다.

상세 분석

이 논문은 “효과 = 모나드”라는 관념에 도전한다. 저자는 효과ful 프로그램을 두 단계로 분리한다. 첫 번째는 문제 영역에 꼭 필요한 데이터 타입과 연산만을 포함하는 첫 번째 단계 DSL이며, 두 번째는 OCaml 같은 풍부한 메타 언어를 이용해 DSL을 조합·확장하는 고차 매크로 시스템이다. 핵심 설계는 태그리스‑파이널 스타일이다. DSL의 의미를 나타내는 추상 타입(int t, ilist t)을 정의하고, 연산(int, nil, cons, recur, fail, |||)을 시그니처에 선언한다. 여기서 recur는 시스템 T의 재귀자를 변형한 것으로, 첫 번째 인자는 리스트 헤드와 꼬리를 받아 새로운 리스트를 만들고, 두 번째 인자는 빈 리스트에 대한 기본값을 제공한다. 비결정성 연산 |||fail은 동등식(동일성 법칙)으로 정의돼 구현이 이 법칙을 만족하도록 강제한다.

DSL은 함수 타입을 전혀 제공하지 않는다는 점에서 전통적인 람다 계산과는 차별화된다. 이는 의도적으로 제한된 표현력을 유지해 구현을 단순화하고, 효과를 메타 언어 수준에서 다루게 만든다. 예를 들어, 리스트 순열을 `perm = foldr insert


댓글 및 학술 토론

Loading comments...

의견 남기기