많은 프로그래머가 아이디어를 시각화하기 위해 화이트보드나 종이에 손으로 필기를 한다. 기존에도 AI가 사용자의 필기를 기반으로 코드를 작성해주는 연구는 있었지만, 필기와 코드가 분리되어 있다는 한계를 벗어나지 못했다. Code Shaping은 단순히 스케치를 코드로 변환하는 툴이 아니라, 필기와 코드 편집이라는 두 워크플로우를 통합하는 툴. 사용자가 코드 위에 자유롭게 필기함으로써 코드를 편집할 수 있다. 코드를 한줄씩 작성하는 것이 아니라, 2차원 평면을 탐색하며 코드를 편집하기 때문에 피험자들이 선형적으로 인식했던 코드 작성을 공간적으로 감각하게 되었다고. https://programs.sigchi.org/chi/2025/program/content/189580

lionhairdino
@lionhairdino@hackers.pub · 45 following · 51 followers
지금까지 다루어 봤던 언어는 아래와 같습니다. MSX Basic Z80 Assembly Pascal GW-Basic C Macromedia Director Visual Basic PHP Flash Actionscript C++ Javascript
그리고 지금은, 하스켈을 비즈니스에 쓰려고 몇 년간 노력하고 있습니다. 지금 상태는, 하스켈 자체를 연구하는 게 아니라, 하스켈 (혹은 함수형 언어) 이해가 어려운 이유를 연구하는 아마추어 연구가쯤 되어버렸습니다. 하스켈 주제로 블로그를 운영 중이지만, 아직은 하스켈 프로그래머라고 자신 있게 말하진 못하고 있습니다. 가끔 이해에 도움이 될만한 측면이 보이면, 가볍게 아이디어를 여러 SNS에 올려보곤 하는데, 그다지 프로그래머에게 쓸모 있는 내용이 포함되진 않는 것 같습니다.
쉽게 접하지 못하는 정보들, 요약과 함께 알려주셔서 감사합니다. @parksbSimon Park
그로센딕이 김장을 할줄 알았다는 이야기는 알고 있었는데(한번 들으면 못까먹음), 이렇게 본격적일 줄은 몰랐다. 한국인인 나보다도 김치에 대해 더 잘 안다.
누군가 검색해보니 악랄하게 수학한 그로텐디크라고 나오네요. ㅎ. 함수형 프로그래밍을 파고 파고, 파다 보면 연결 고리가 있을지도 모르겠는 분이네요.@bglbgl gwyng
휴일인지 깜빡하고 출근해버렸다ㅋㅋ
ㅋㅋㅋㅋ
웃음만 남기는 댓은 잘 안다는데, 웃음만 나와서요
@bglbgl gwyng
업자를 위한 아주 인포멀한 모나드 설명

lionhairdino @lionhairdino@hackers.pub
1.
함수형에선, 스트림 [1,2,3]
에
(+1)
을 map
해서 [2,3,4]
를 만들고,
(+2)
를 map
해서 [3,4,5]
를 만드는 작업을,
(+2) ∘ (+1)
를 [1,2,3]
에 map
하는 걸로 표현할 수 있어야 한다.
(+1)
, (+2)
, ((+2) ∘ (+1))
함수들은 모두 Int -> Int
함수를 원하는 곳에 넣어 줄 수 있는 함수들이다.
위와 같이, 완벽하게 정보를 유지하진 않지만, 같은 "류"의 작업을 두 번 하는 것을, 한 번 작업하는 것으로 표현할 수 있는 경우도 있다. 예를 들어,
첫 번째 작업으로, "hello"
를 로그로 남기고,
두 번째 작업으로, " world"
를 로그로 남기는데,
이를 한 번의 작업으로, "hello world"
를 로그로 남기는 작업으로 표현할 수 있다.
여기는 로그를 남기는 횟수 정보는 필요 없고, 최종 로그만 필요하다는 인위적 정보 선택이 들어가 있다. 이 인위적 선택(여기선 로그 문자열을 합치는 것)을 수긍해야만 가능하다.
로그를 남기는 작업을 m
이라 부를 때, m a
를 받는 곳에 m (m a)
를 넘길 방법이 생긴다는 뜻이다. 달리 말하면, m (m a)
로 표현되는 작업을 인위적인 절차를 거쳐 m a
로 만들어도, 내가 필요한 정보는 사라지지 않는다는 뜻이다.
2.
무언가가 하나인데, 유심히 보면 하나가 아닌 경우, 이게 바로 모노이드다. mono
는 하나를 뜻하고, ~oid
는 "척"하는 걸 말한다. (예. 인간인 척 하는 휴머노이드) 하나인척 하는 게 모노이드다. 수학 책 앞 부분에서 이항 연산, 결합 법칙, 항등원이 있으면 모노이드라는 설명을 하는데, 그래서 모노이드가 뭐에 쓰는 물건인지는 한참 공부해야 알 게 된다.
(아래는 혼자만의 생각입니다.)
모노이드를 바라 보는 눈 중 하나로, "모든 대상을 이항 연산으로 표현"을 들 수 있다.
0
을 포함한 자연수들 0,1,2,3,...
들은, +
이항 연산과, 이 연산의 항등원 0
이 있으면, 모두 ○ + ○
한 가지 모양으로 표현할 수 있게 된다.
0
-> 0+0
1
-> 0+1
2
-> 0+(1+1) = 1+1
...
모노이드 구조이기에, 어딘가에서 ○ + ○
모양을 원한다면, 0,1,2,3,...
을 모두 넣어 줄 수 있다.
3.
"어딘가에서 m a
를 원한다면, m a, m (m a), m (m (m a)), ...
를 모두 넣어 줄 수 있다."를 위와 비교하며 보자.
위에서 얘기한 인위적 선택 작업을 join
으로 표현하면,
m (m a)
--join--> m a
m (m (m a))
--join--> m (m a)
--join--> m a
...
m
반복 작업을 모두 ○ --join--> ○
모양으로 표현할 수 있을 것만 같다. 그런데, 딱 하나는 표현하지 못한다. join
은 m
이 두 개 있는 걸, 하나로 만드는 작업이라, m
하나를 ○ --join--> ○
로 표현하지 못한다. m
을 join
이 들어간 모양으로 표현하려면, 자연수, +
에서 처럼 0
에 대응하는 것이 필요하다. m
하나를, m
두 개로 만들되, 최종 결과에 영향을 미치지 않는 pure
라는 작업을 만든다. 위 로그 작업을 예로 들면, 로그로 빈문자 ""
을 추가하는 작업을 pure
로 만든다. 그러면 이제야 비로소, 모든 반복된 m 을 join으로 표현할 수 있게 된다
m a
--pure--> m (m a)
--join--> m a
m (m a)
--join--> m a
m (m (m a))
--join--> m (m a)
--join--> m a
...
이제, join
절차가 항상 있는 m a
를 원하는 곳에 m a
도 m (m (m a))
도 넣어 줄 수 있게 되었다.
"hello"와 " world"를 남기던 두 개의 작업 합쳐, "hello world"를 남기는 하나의 작업으로 표현할 수 있게 되었다.
※ 지금 눈에 명확히 보이진 않지만, m 둘을 합성하는 연산을 .
이라 하면, .
만으론 모노이드 이항 연산 역할을 못하지만, join
의 도움을 받고, id 만으론 항등원 역할을 못하지만, pure
의 도움을 받아 모노이드 구조를 이룬다.
결론.
당연히 모든 내용이 담겨 있진 않고, 모나드를 무엇의 모노이드로 보는 내용을 비수학적으로 풀어 봤다. 모노이드는 모두를 하나의 모양으로 표현 할 수 있다는 걸, 보증해주는 거대한 개념이지만, 업자인 나에겐 "그렇게 해도 된다"는 정도의 느낌만 있다. (결합 법칙이 빠졌는데, 나중에 코드를 모듈화 하는 것과 연관지어 보면, 명확한 대응을 알 수 있다.)
모나드는, 조금 다르게 생긴 것을, 당장 필요한 요소만 잘 관리한다면 "같은 걸로 치자"를 멋지게(,어렵게) 형식화한 이론이다.
사족.
저와 대화를 나눠본 분들은 아시겠지만, 제가 비전공자라 용어 선택이나 개념 정의가 매우 인포멀해서 인상을 찌푸리는 경우도 자주 만듭니다. PL 전공자분들처럼 깊숙히 이론을 파고 싶은 게 아니라, 현실에 적용할 수 있을 만큼의 눈만 가지고 싶습니다. 현실을 모델링할 때, "인위적 정보 선택"을 해서 필요한 정보를 남길 수 있는 경우를 알아채는 눈을 길러야 되는데, bind
또는 flatmap
, return
또는 pure
가 있는 구조가 모나드라고만 배우면, 이런 눈을 가지는데 매우 오래 걸리는 것 같습니다.
비전공 업자분이 보셨다면, 얻어 가시는 아이디어가 있었으면 좋겠고, 전공자분이 보셨다면, 인포멀한 부분에 너무 인상 찌푸리지 마시고, 틀린 개념이 있다면, 부드럽게 조언을 해주시면 좋겠습니다.
※ 모나드 용어는 mono
와 triad
에 온 게 아닐까 의심한다는 설이 있습니다.(검색해 보면 근거는 미약해 보입니다.) 모나드는 join
, return
그리고 위에서 명시적 언급은 안했지만, 펑터의 fmap
, 이렇게 세 개 triad의 도움을 받아 모노이드로 만들 수 있는 구조입니다.
※ "정교한" 내용이 아님을 강조하고 선입견이 생기지 않기 위해, 일부러 제목을 달지 않고, 반말(혼잣말)투로 썼습니다.
제목은
- 함수형
- 모노이드
- 모나드
순서 입니다.
이래서 이 분 강의를 좋아합니다.
음성 채팅하는 곳인가요? @alternativeAlternative_Talk
배포distribute 配布 (유사어 배치排置: 일정한 간격으로 벌여 놓다)
신문이나 책자 따위를 널리 나누어 주다
배치deploy 配置
군대를 전장에 배치하듯, 비즈니스 서비스에서 서버를 현장에 배치한다. 실전을 뛰게 배치한다.
"새로 만든 앱을 배치해서 사용자에게 배포했어"
프론트엔드하면서 하스켈 공부한다하면 역시 PureScript로 공부하는게 낫겠군.
제가 비슷한 테크를 타고 있는데요. purescript에서 할로겐 집적대다 대대적으로 ghcjs 변화가 있다해서 하스켈로 왔습니다. 근데 ghcjs 설치나 각 종 예시때문에 닉스 공부 중입니다. 개미 지옥 ㅎㅎㅎㅎ@kodingwarriorJaeyeol Lee
이런 용어집도 있었구나! 이거 설마 예전에 봤던 neo4j 책에서도 이 용어집을 참고했으려나!
여기 가로 스크롤 생깁니다~~ ㅎㅎ 준규님 가로 스크롤 보고좀 하겠습니다@hongminhee洪 民憙 (Hong Minhee)
'모나드는 모노이드 엔도펑터다'가 이제 무슨 뜻인지는 안다. '모노이드'라는게 >>=
보다는 join
을 쓸때 더 와닿는데, >>=
를 join
보다 한 30배는 더 자주 쓴다. 그래서 저 사실을 평소에 잘 느끼고 살진 못하는거 같다. 하지만 가끔 join
으로 타입을 눌러서 맞출때 개꿀따리란 생각이 들긴하다.
좀만 빨리 보셨다면, 저 안쫓겨 났을지도 모를텐데요...ㅋㅋ
@hongminhee洪 民憙 (Hong Minhee)
@xiniha Not All Heroes Wear Capes
힘들게 일하는데, 망토정도는 입어줘야 폼도 나고 티도 나지 않을까요. @bglbgl gwyng
@hongminhee洪 民憙 (Hong Minhee)
@xiniha
자녀계획 3명 정도로 계획하면?
.
.
.
.
.
.
.
.
미래애셋 ^^
@lionhairdino HLS 버전도 고정하고 쓰시면 됩니다
요즘 한참 닉스보고 있는데, 안그래도 닉스로 고정해보려고 합니다.
생각보다 훨씬 자세하게 명문화된 규칙이 있군요.! 공부하면서 이 예시 저 예시 보다 보면, 버전이 널뛰고, 그러다 보면 HLS 지원이 오락 가락하게 되어, 사실 각 잡고 프로젝트에 쓰는 것 아니면, 의존도가 높지 않게 되어버리더라고요. 그 이유가 버전 지원 때문이란 생각에, 미리 HLS 친화적인 버전을 골라낼 수 있나 했는데, 그러긴 어려울 것 같네요.
최신 HLS(Haskell Language Server) full 지원하는 GHC 버전은
9.12.2
9.10.1
9.8.4
9.6.7
9.4.8
라는데, 무슨 기준으로 살리고 버리고 하는 걸까요? 전혀 패턴이 안보이네요.
관리자분들이 쓰는 버전들 아닌가 몰라요.ㅎ
@ailrunAilrun (UTC-5/-4)
각 버전대의 최신 버전인가 보네요.
최신 HLS(Haskell Language Server) full 지원하는 GHC 버전은
9.12.2
9.10.1
9.8.4
9.6.7
9.4.8
라는데, 무슨 기준으로 살리고 버리고 하는 걸까요? 전혀 패턴이 안보이네요.
관리자분들이 쓰는 버전들 아닌가 몰라요.ㅎ
@ailrunAilrun (UTC-5/-4)
링크 첨부때문에 가로 스크롤이 생겼었는데 언제 시라졌데요.
@bglbgl gwyng
@lionhairdino 헤이즐넛의 나무, 그러니까 유럽개암나무가 이름의 어원이랍니다.
그냥 이름 뜻 얘기하시는 거구나. 하고 넘어갔는데 생각해보니 bgl님 까먹지 말라고 살 붙여주신 거군요. 친절도 하셔라 ㅎㅎ@ailrunAilrun (UTC-5/-4)
@bglbgl gwyng
@bglbgl gwyng
@lionhairdino 헤이즐넛의 나무, 그러니까 유럽개암나무가 이름의 어원이랍니다.
HLS의 윙맨 같은 기능을 전면에 특징으로 내세우는 건가요? @ailrunAilrun (UTC-5/-4)
@bglbgl gwyng
@lionhairdino
@bglbgl gwyng 너무 큰 비약인지는 모르겠으나 보면서
https://hazel.org/build/dev/ 이 떠오르네요. 편집기가 code를 맘대로 바꾼다는 측면에서 말이지요.
@lionhairdino 들여쓰기를 제외한 토큰을 구분하는 용도로 쓰이는 공백을 그냥 공백이라고 했네요.
들여쓰기가 물론 가독성은 좋지요. 근데 편집할때 불편을 주는 문제가 있고, 에디터가 좀 힘을써주면 양쪽의 장점을 다 취할수있다는 얘기였습니다.
에디터와 언어 문법 관계 얘기를 보다보니, parinfer 가 생각나네요. 이런 게 좀만 더 일찍 나왔더라면, 제가 Lisp를 지금보다는 잘하고 있었을지도 모르겠습니다. @bglbgl gwyng
ai코딩에선 리터럴 하스켈이 다른 역할을 할 수도 있지 않을까 싶어요. 의도를 써놓은 풍부한 자연어 주석을 보고, 맞는 코드가 나왔는지 자동 검증하는 상상을 해봤습니다.
엎드려자면 가슴쪽이 아프고, 누워서 자면 등이 아프고 으악
전 온찜 신봉자라 삐끗하면 2~3일 달고사는데요. 근육 문제고, 붓기가 없다면 온수담는 팩 하나 사서 틈틈히 온찜 해주면 좋습니다. 나이상 근육 문제일 것 같긴한데, 그래도 날짜가 길어지고 있으니 병원가셔야겠습니다. @kodingwarriorJaeyeol Lee (a.k.a. kodingwarrior)
@hongminhee洪 民憙 (Hong Minhee) 약간 딴 얘긴데, 저는 들여쓰기가 그냥 안좋은 문법요소 같습니다. 코드의 복붙을 unreliable하게 만들어버려서요. 반대로 space sensitive한 문법은 괜찮다고 생각합니다. 복붙시 문제가 생겨도 스페이스 한번 치면 해결되니까요. 들여쓰기 대신에 {} 쌍을 쓰게 만들되, 에디터에서 보여줄때 어떻게 알아서 예쁘게 보여주는게 낫다고 생각해요.
들여쓰기와 공백에 민감?한 게 다른 건가요?
하스켈은 들여쓰기가 슈거 문법 같은 거라 들여쓰기 없이 괄호와 세미콜론으로 작성할 수 있는데, 익숙해서 그런가 들여쓰기가 더 가독성이 높은 느낌도 듭니다. @bglbgl gwyng
디자인툴을 만들어서 공개를 하다니, 의외의 행보입니다. 최근 우수 인력들이 많이 모이고 있다는 소식을 종종 들었는데요. 너무 우수한 인력들이 모여서 "남는 재능"이 생겼나 상상될 정도로 의외네요. ㅎㅎ @hongminhee洪 民憙 (Hong Minhee)
서울 하스켈숲 워크숍 완주했습니다...! @eunmin 님의 친절한 설명과 세심한 준비에 감사합니다 🙇
이야, 개근상에 케익까지! 은민님이 준비 많이 하셨네요. 직장인이 한 번도 안 빠지고 하기 힘들겠다 싶은 스케줄이었는데, 여튼 축하드립니다~ @nyeongAn Nyeong (安寧)
리액트 공식 문서가 너무 잘 만들어져 있어서 정주행하면서 감탄하는중... 와...
나의 퀀트 투자 3개월 수익률... 첫 1개월은 10~15% 정도의 양호한 수익률을 유지하다가 트럼프가 무역전쟁을 시작하면서 나락에 빠졌다. 이런 상황에도 용기를 갖고 다음 3개월을 준비해야 한다...
투자금이 많이 물려있으면, 짧은 기간에 공포스러운 수치네요.@parksbSimon Park
Mastodon 호환 API를 구현할 계획에 대해 문의 주시는 분들이 종종 계십니다만, 아마도 Hackers' Pub은 앞으로도 Mastodon 호환 API를 구현하지는 않을 것 같습니다. 개인적으로 Mastodon 호환 API가 사용성이 많이 떨어진다고도 생각하고, 이미 Hackers' Pub 고유의 기능들 가운데 Mastodon 호환 API로 표현 불가능한 것들이 좀 있기 때문입니다.
장기적으로는 GraphQL을 이용해 웹 프런트엔드도 크게 개선하고, 모바일 앱까지 만드는 걸 염두에 두고 있습니다.
어떤식으로 성장할지 "시리즈 드라마" 보듯 보고 있습니다. 현재까지는 남들한테 소개할 만큼 재밌네요.@hongminhee洪 民憙 (Hong Minhee)
@lionhairdino 예를 들면 "다양한 시선에서 코드를 이해한다"가 지금 공개한 연작의 2 편에서 논건 대수를 통한 계산의 이해와도 밀접한 연관이 있다고 읽혔습니다. 원래 두번째 주제에 대해서 쓰다가 방향성을 틀었네요.
"여론에 따라" 함수형 추상 기계 관련 글을 쓰고 있었는데, 쓰다 보니 논리와 low-level data representation 이 보였다는 핑계 말씀이지요? 생각할 엄두조차 내지 못했던 주제들, 다 이해는 못하지만 감사히 보고 있습니다. SPJ, 와들러 교수님 등의 교양 수준 강의 활동들을 보다 보면, 왜 국내 교수님(고인물-댓가없이 입문자들에게 도움을 준다는 의미)들은 없나 아쉬운데, 엘룬님 글로 조금 달래지네요. @ailrunAilrun (UTC-5/-4)
에디터의 플러그인도 Nix로 관리하고 싶다. 에디터 쪽에서 지원을 해야하는데, 누군가 총대매고 해줄법도 한데...
빔으로 넘어 오신다는 말씀인가요?ㅎㅎ@bglbgl gwyng
말씀하신 것들을 보아 몇몇 분들은 실제 내용 측면에서는 논리와 저수준 자료표현에 더 관심을 가질 분들이 있는 것 같아 전자를 (먼저?) 다뤄보도록 하겠습니다. 2 편으로 나눠져 올라갈 예정입니다.
ㅋㅋㅋ 뭔가 “답정너" 느낌이 있는데요. 댓글 여론과 다른 ... 농담입니다. 전혀 불만 없이 기다리고 있겠습니다.@ailrunAilrun (UTC-5/-4)
@parameterfreak 예전에 정리해둔 아래 글을 참고해 보셔요!
처음 보는 분들이 직관적으로 알만한 이름짓기가 필요한가 싶습니다. ”연합 타임 라인 비노출“ 같은 지관적 이름이면 좋겠는데, 말이 이쁘지는 않네요@hongminhee洪 民憙 (Hong Minhee)
@parameterfreak
누가 야심한 시각에, 운동량 떨어지는 직업군이 바글 바글한 곳을 맛난 사진으로 채워놨네요.
@lionhairdino 그... 침대에 엎드려서 자서 그렇다네요...
그럼, 더더욱 운동하라는 알람이 울린 거로 봐야겠습니다. 그 정도 "행위"로 그 정도로 "버벅"일 나이는 아직 아닙니다. @kodingwarriorJaeyeol Lee (a.k.a. kodingwarrior)
완전한 검정 배경에 하얀 글자는 대비가 높아, 눈에 잔상이 남습니다. 눈의 피로를 덜기 위해 다크 모드를 주 톤으로 선택했다면, 대비를 적당 수준으로 낮춰야 합니다. 나이가 올라갈 수록 영향을 받습니다. 모르시는 분들이 많은 것 같습니다.
@lionhairdino 엎드려자서 그렇다네요...
고3이십니까, 이젠 그리 자면 안됩니다. @kodingwarriorJaeyeol Lee (a.k.a. kodingwarrior)
저는 해커스펍에 아직 따로 알림이 없으니, 자주 리프레쉬하면서 새 글이 있나 보는데, 다른 분들도 다 그렇게 하고 있는 건가요?
논리와 low-level data representation을 다뤄볼지, 아니면 함수형 추상 기계들(Turing Machine같은 것이지만 함수형을 위한 것들)을 다뤄볼지
둘 다 보고 싶지만, 하나만 골라야 되면, 함수형 기계 고르겠습니다. 독자 한 명의 한 표입니다. @ailrunAilrun (UTC-5/-4)
@lionhairdino 목도. ... 약간 뻐근하네요 크흡
해당 근육을 쓰는 일이 없었는데, 뻐근하다면 몸살이거나, 어딘가에서 신경을 누르거나 그럴 수 있는데요. 목 스트레칭 자주 해주고, 목 주변 잘 풀어주세요. 전 당연히 의료 지식은 없고요. 하도 개발자 직업병 리스트에 있는 거 다 거쳐가고 있어서리... @kodingwarriorJaeyeol Lee (a.k.a. kodingwarrior)
일어날때마다 늑골 주변 근육 중심으로 압박 받는것 갗은데 이거 무슨 증상이지 흠
목은 괜찮은가요. 계속되면 꼭 진료 받아 보시고, 운동하라는 강한 신호 떨어졌나 본데요. @kodingwarriorJaeyeol Lee (a.k.a. kodingwarrior)
앱 디자인을 참고하려고 쓰레드를 깔아봤는데, 볼수록 디자인이 참 좋다. 문외한이 봐도 뭔가 깔끔하고 고수들이 만든게 느껴진다.
근데 그 아름다운 디자인위에 뜨는 컨텐츠들기 그렇게 소음공해일수가 없다. 뭐 틱톡은 어처구니없어서 웃기기라도 하지 이건 정말...
한 3~4일 관심 없음, 관심 없음 열심히 눌렀더니, 그 후로 개발 얘기만 70~80프로 뜨는 것 같아요.
이 때가 좋았지. 신선한 내용들이 가득한데, 글도 잘 써놔서 이해도 곧잘 가고...
무려 4년 전에 패터슨 조건을 공부하고 정리 해 놨는데, 패터슨 조건이란 말을 보고, "어, 저거 어디서 들어 본 건데..."하고 있다. 입력이 누적되지 않고, 점점 밑 빠진 독처럼 새 나간다... 씁쓸하네...이거.
해커스펍에서 댓글을 달 때, 굳이 @
로 아이디 언급을 하지 않아도, 원 글과 타래는 연관 지어지는 거지요? 타래에 참여하고 있는 분들이 여럿이라면, 다 언급을 해야 하는 거고, 한 분이라면 굳이 언급하지 않아도 되는 거고요?
@lionhairdino
@bglbgl gwyng 어느 쪽이 더 "정상이다"가 아니라, GADTs의 Record 갱신을 지원하려면 필요한 변경입니다.
9.6 전에는 실수로 허용되던 것이란 말이 나와, 학문적 정 부 의 가치가 있는 줄 알았습니다. @ailrunAilrun (UTC-5/-4)
@bglbgl gwyng
답 댓글이 아니라, 질문 댓글입니다. 레코드 업데이트 하는 동안에 반드시 레코드 타입을 먼저 알아야 한다는 게 "정상"이라는 거지요?
bar :: T Int
-- bar = emptyT --- 허용
bar = emptyT { x = [3] } --- 레코드 업데이트 중에는 타입 specialize를 못하니 불가
컴파일러 변화가 하나만 있다해서, 하나가 아닌데 하고 댓 달았는데, 읽어보니 다나 마나한 댓을 달았네요. 마이그레이션 페이지에 있는 내용을 풀어서 설명하신 거였군요. @bglbgl gwyng
https://gitlab.haskell.org/ghc/ghc/-/wikis/migration/9.6#superclass-expansion-is-more-conservative
내가 9.4 -> 9.6 마이그레이션에서 겪고 있는 문제가 이거랑 관련이 있는거 같은데(확실치 않음)... 9.4에서는 c :: Type -> Constraint
일때 forall c. c Int
뭐 이런 조건이 있으면, 모든 c
에 대해 c Int
가 존재하는게 말이 안되는데도 실제로 c Int
꼴로 쓰이는 c
만 고려해서 타입체크를 통과시켜줬던거 같다(이것도 확실하지 않음). 근데 9.6에선 당연히 거부당한다.
위의 내 이해가 맞다면 9.4의 constraint solving 완전 무근본이었단건데, 이건 또 믿기 어렵다(하스켈의 설계 결정에 대한 신뢰 유지한다고 하면). 어디서 내가 잘못 파악한거지.
9.6 migration 컴파일러 변화가 타입 패밀리, 슈퍼 클래스 관련 동작이 있네요. @bglbgl gwyng
3년차 웹 프런트엔드 개발자입니다. 잠시 10주 여름 방학 동안 계약직으로 일할 수 있는 직장을 찾고 있습니다. (6월 마지막 주부터 8월 마지막 주) http://frontend.moe/portfolio/
올해 2학기까지 수료하면 졸업 예정이라, 학부 졸업 이후 정규직 전환 조건으로도 희망하고 있습니다.