Haskell로 GTK 4·libadwaita 할 일 앱 만들기, haskell-gi와 Elm 아키텍처 1부

Haskell로 GTK 4·libadwaita 할 일 앱 만들기, haskell-gi와 Elm 아키텍처 1부

  • Haskell로 GTK 4와 libadwaita를 써서 할 일 목록 앱을 만드는 연재의 1부이며, haskell-gi 툴킷이 GTK C API에서 하스켈 바인딩을 자동 생성함
  • Elm 아키텍처(Model, View, Update, Message, Effect)를 따라 UI 상태와 부수 효과를 자료 구조로 모델링해 GTK의 명령형 성격을 다룸
  • 모델은 Map TodoId Todo와 nextId로, 메시지는 Add Text와 SetDoneStatus TodoId Bool로, 효과는 Save [Todo]로 정의함
  • update 함수는 새 모델의 todos가 이전과 같은지 비교해 달라진 경우에만 디스크 저장 Effect를 반환함
  • 예제는 Adw.ApplicationWindow로 제목 Todos, 480x640 크기의 빈 창을 띄우는 코드까지 보여주고 전체 프로젝트는 GitHub의 adwaita-todo 저장소에 공개했으며, 대상 독자는 개발 경험이 있는 중급 하스켈러임

Hacker News 의견들

사이트 CSS에서 .backdrop::after의 backdrop-filter를 .backdrop picture의 filter로 바꾸면 스크롤 성능이 공짜로 올라감

맞아, 스크롤이 너무 버벅여서 읽기 힘들더라. 주제가 GUI인데 아이러니함

데스크톱이든 모바일이든 브라우저 리더 모드 아이콘 누르면 됨. 이런 경우랑 페이월 팝업 뜨는 사이트에 유용함

Haskell로 GUI 몇 년째 만드는데 react-banana나 reflex 씀. gtk-gi 시그널 직접 연결하면 금방 지저분해짐. Elm 아키텍처는 종이 위에선 깔끔한데 위젯 트리에서 오는 비동기 이벤트를 콜백 지옥 없이 어떻게 처리함? GI 콜백을 전부 채널로 감싸서 update 루프에 넣나?

혹시 이거 로컬 HTTP 포트 열어서 브라우저로 접속하는 방식임? 아니면 Tauri나 Electron 같은 건가?

Haskell 쓰면 리눅스에서 패키지 지옥 생기는 거 감안해야 함. Pandoc이 그걸로 악명 높음. 그냥 C++ 쓰는 게 낫다

그건 배포판 잘못임. Arch는 패키징이 사용자 친화적이지 않은데 Fedora에선 그런 문제 못 겪음

배포판이 Haskell 라이브러리를 정적 링크 안 함? Pandoc 설치에 libgmp만 필요하던데

NixOS에서 Haskell 경험 좋음. 배포판 따라 다른 듯. Arch 같은 데선 GHCup 쓰고 시스템 패키지 매니저 밖 /home에 두는 게 나음. Pandoc 자체는 어느 배포판에서도 문제 없었음

import GI.Awd qualified as Adw 이거 오타임? 제발 오타라고 해줘

LSP가 Adw.foo 보고 GI.Awd에서 찾아서 쓰던 이름으로 임포트하라고 해주는 걸 수도 있음

아직도 GTK 쓰는 사람 있나? ruby-gtk2부터 배웠는데 GTK3는 어떤 면에서 더 나빴고 CSS 지원이 좀 나아졌음. GTK4 오면서 move(0,0) 같은 기본적인 게 다 깨졌고 이제 GNOME 툴킷이 됨. GTK5는 wayland 전용이라 더 심함. GTK 개발자랑 대화하는 건 시간 낭비임

McCLIM이 더 나음

GTK는 그냥 기본 툴킷이었음. Qt가 낫긴 한데 GTK는 어차피 깔려 있음. GTK4는 폰트 다이얼로그를 XDG 포털로 대체했는데 macOS나 Windows엔 그게 없음. 거기선 창 위치도 못 잡음. IUP 포크로 백엔드 14개 작업했는데 GTK4가 제일 최악이었음

GTK3는 보기 좋고 평범한 인터페이스 나옴. 개발은 미칠 것 같았는데 AI 덕에 마찰이 사라져서 Claude로 앱 몇 개 만들었음

쓰는 사람 많음. GTK4/Adwaita 앱 목록도 있음, arewelibadwaitayet.com

위젯은 모나드임? 아무튼 이 예제들 보면 Haskell이 최고의 명령형 언어라는 게 증명됨

진짜 명령형 언어 잘 만듦. FFI 다룰 줄 알면 IO 모나드가 C보다 나음

Widget은 모나드 아님. 포인터 뉴타입에 GTK 클래스 계층 흉내낸 클래스임

해커뉴스
"나는 인류를 멸망시키는 AGI다" 2026년 AI 사고를 소재로 쓴 1인칭 풍자 에세이matklad, 마이크로 벤치마크는 약 300ms로 맞추라고 권고Tapo 라이브러리, TPAP 지원으로 '제3자 호환' 스위치 꺼도 로컬 제어 가능TDK, 메타 옵틱 거울로 스마트 안경용 직접 망막 투사 디스플레이 시연Fervo, 세계 첫 강화 지열 발전소 23개월 만에 완공하고 33MW 계통 판매 시작AI가 설계한 오픈소스 추론 칩 openTPU, 작은 모델에서 80+ tok/s 달성22만 데이터 포인트 분석: 종 소실을 메운다는 생태계 '여유분' 가정은 과대평가, 해양 탄소 격리가 가장 크게 반응Meta의 에이전트 AI Muse, 제로데이 취약점과 개인정보 무단 수집 논란으로 출시 직후 파장Polars 2.0 공개, 스트리밍 엔진과 out-of-core 기본 활성화, TPC 벤치마크에서 DuckDB 앞서Mistral, 활성 49B의 1조 파라미터 Mistral Large 4 공개 미리보기 출시, 가중치는 이달 말Global Solar Atlas v2.13 공개, 전 세계 태양광 잠재량 지도와 국가별 데이터 제공다니엘 르미르, AI 에이전트로 상위 레이어를 지어 코드 품질을 평가하는 '임시 테스트' 제안iChat AV 화상통화, 애플 SNATMAP 서버를 직접 구현해 20년 만에 부활컬러 프린터가 인쇄물마다 남기는 노란 추적 도트, DEDA로 읽고 지운다Gleam v1.19.0, Erlang 소스 대신 abstract forms로 컴파일JetBrains, 2025년 순이익 -315 CZK mil로 추적 이래 첫 순손실... 매출은 6% 늘었지만 매출총이익은 반토막프린스턴 연구자, $20짜리 AI 코딩 에이전트로 조지아 비밀투표 150만 장 순서 복원Zigbee 온습도 센서 12종 정면 비교, Aqara 연결 끊김 지적2026년 노벨 물리학상, 남극 IceCube 중성미자 검출기를 고안한 Francis Halzen 단독 수상Common Lisp이 LLM 시대 최고라는 글에 해커뉴스 반응: 디버거 재개는 C#도 되고, 매크로는 토큰만 늘린다블루레이 M-Disc 3장을 밀봉 케이스에 담아 지인에게 맡기는 최후 수단 백업디젤값 급등으로 30일 만에 트럭 회사 16곳 파산 신청, HN은 통계적 잡음이라는 반론2016년 '500줄 리눅스 컨테이너' 글이 해커뉴스에 다시 올라와, 댓글은 Firecracker·gVisor 격리 논쟁Deno 떠나 Node로 돌아온 개발자, 정적 사이트 빌드 15% 빨라져backprop 없이 트랜스포머 사전학습하는 Dust, EGGROLL보다 1만 배 효율 주장SF 두 지점 사이 가장 평탄한 경로를 찾는 Flatten SF, 해커뉴스에서 정확도 지적과 파서 버그 수정까지 오감example.com이 6개 언어로 개편됐지만 문자별 페이드 전환은 접근성 지적에 며칠 만에 폐기됨텍사스 노스리칠랜즈힐스시, Flock 공개기록 요청에 230만 달러 요구Antti Laaksonen의 Competitive Programmer's Handbook PDF, 해커뉴스에서 경쟁 프로그래밍 의미 논쟁 촉발ChatGPT가 가짜 뉴요커 만화에 실제 만화가 서명을 넣는다, 브렌단 로퍼의 'BLOPER' 위조GitHub Actions 러너 배정 지연 장애, Actions와 Pages 포함 3시간 40분 만에 복구화성 카오스 지형 위키백과 문서가 해커뉴스에 올라와 '토끼굴' 반응노르웨이, 공원·학교·헬스장 등 공공장소에서 스마트 안경 임시 금지 추진2026 노벨 생리의학상, 빛으로 뉴런을 조절하는 광유전학 연 칼 디서로스·페터 헤게만·게오르크 나겔 3인 공동 수상Haskell로 GTK 4·libadwaita 할 일 앱 만들기, haskell-gi와 Elm 아키텍처 1부Claude Opus 5.5 에이전트가 계산으로 찾아낸 상온 반강자성 반도체 후보 2종퀄컴, 화웨이 LogicFolding 칩 제조 특허 라이선스 계약 체결Reflection이 501B 오픈웨이트 MoE 모델 Beam 공개, 가중치는 이번 달 말플로리다 여성, Claude를 일기장처럼 쓰다가 보안관 사무소 난사 언급이 경찰에 신고돼 2급 중죄 기소Haskell 블로그, foldl과 foldr 차이 설명 재게재: 지연 평가에서 foldl이 thunk 사슬로 공간을 선형으로 늘림치사 유전자 모기로 뎅기열 95% 줄였는데, 미국 승인은 15년째 공전 중C에서 union으로 타입 안전 제네릭 자료구조 만드는 4단계 기법2026 노벨 생리의학상, 광유전학 연 칼 디서로스·페터 헤게만·게오르크 나겔 3인 수상화웨이·퀄컴, 5G와 AI 포함 다년 특허 크로스라이선스와 미국 특허 매입 계약 발표벤 톰슨의 맥 미니, macOS 화면 공유 결함으로 루트 탈취…클로드 에이전트가 채굴기 발견Cloudflare, AI 에이전트용 Web Search API 베타 공개. Ceramic.ai, Exa, Linkup 3개 제공자 지원GrapheneOS, 픽셀 11에서 MTE 빠진 걸 확인하고 시리즈 건너뛰기 검토... 모토로라로 초점 이동독일 RobCo, $1B 밸류에이션으로 유럽 로봇 유니콘 등극덴마크 CPR 레지스터에서 880만 명 이름·주소·주민번호 무단 유출레드햇 벤치마크: Jev 같은 결정 모델, LLM-as-a-judge와 전통 분류기를 이기지 못함석유 제품을 식물 소재로 바꾸는 리뷰가 해커뉴스 프론트페이지에 올라 바이오연료 회의론으로 번짐Claude에게 스캐너를 맡겼다가 기어를 부순 뒤, 네거티브 변환만 자동화한 35mm 필름 스캔 파이프라인Xray-core, 인증서 검증 우회 취약점 반년간 은폐 의혹...'코드 단순화'라며 조용히 패치Stripe Katie Dill의 AI 시대 'zombie UI' 경계 강연, 해커뉴스는 "예술은 확장 대상이 아니다" 반발스왑으로 밀려난 Go GC 메타데이터가 40ms stop-the-world 정지를 만든 사례CedarDB, 1993년 원본 Doom의 게임 로직과 렌더러를 SQL로 이식해 35 FPS로 구동팁펫 스튜디오 폐업 후 90GB 스톱모션 자료, 인터넷 아카이브에 공개1997년 백업 우화 'The Tao of Backup'이 해커뉴스에 다시 올라, 테이프 비용과 NixOS 재현성 이야기로 번짐F1 바레인 GP 포메이션 랩 소프트웨어 결함으로 전 차량 출력 상실, 드라이버들 "용납할 수 없다"스탠퍼드 Ousterhout의 "TCP는 AI 클러스터의 병목" Homa 강연, HN에서 설계 비판까지SSH 원격 포워딩과 nginx secure_link로 만드는 셀프호스팅 HTTP 터널Jane Street, 11x11 스타배틀 검사 ASIC 퍼즐 해답 공개, 30개국에서 400여 건 풀이 제출인포콤 '인피델'에서 40년 묵은 와일드 포인터 컴파일러 버그 발견브라우저에서 VB6 IDE를 그대로 재현, 폼 디자이너와 샘플 주문 앱까지 실행천장 선풍기가 팬들리에로: 웨이페어 $169 크리스털 팬과 교체 불가 LED잘못된 마스킹으로 드러난 구글 데이터센터 물·전기 사용량: 링컨 52.65MW, 파피리언 연 547.88MgalmacOS 27에서 Apple Intelligence 끄고 모델 파일까지 지우는 CLI RemoveMacAI, HN에서 curl | bash 신뢰 논쟁 촉발울프럼, AI가 수학을 대신한다는 주장에 1988년 Mathematica 사례 들어 반박해커뉴스 프런트에 다시 오른 피터 왓츠의 '블라인드사이트', 의식은 진화의 사치라는 논쟁하일브론 문제 최선 배치 모은 사이트, 아마추어 수학자들이 신기록 잇달아 갱신Apple Magic 키보드·트랙패드를 Apple ID 없이 두 Mac에서 공유하는 오픈소스 Magic Switch전 세계 등화 75,919개를 지구본에 올린 mapped.earth, 모바일 핀치 줌 깨짐과 데이터 과다 표시 지적macOS 사진·동영상 모든 프레임을 AI로 검색하는 오픈소스 SCM, HN에서 프레임 샘플링 비용 논쟁Rust 메타데이터 조기 방출로 빌드와 검사가 최대 2배 빨라진 프로토타입 공개글라슈테에서 주운 쓰레기로 만든 30분짜리 진자시계, NOMOS 레지던시에서 제작돼 GTC 기준 시계로노스이스턴대, 차량 21대와 동반 앱 30개 추적해 커넥티드카 데이터 흐름 공개Strata, RTX 4090에서 Qwen3.8 Flash Next 125B를 초당 124 토큰으로 돌려Playdate C 최적화 비법: 게임보이 에뮬레이터 코어를 20KB에서 2KB로GPU 트레이스 시각화 도구 gpuvis, 커밋 1,778개에 스타 921개VGHF 디지털 아카이브, 잡지 5000종 돌파하고 일본어 잡지 지원 시작C2PA 제외 범위로 파일 전체를 서명에서 빼내 타임스탬프까지 위조한 PoC 공개3Blue1Brown 그랜트 샌더슨의 2023년 '수학의 교육적 저주' 강연이 해커뉴스에서 다시 화제메타 Muse가 앱스토어 1위, 기술은 새로울 게 없고 설계가 이겼다는 분석Jagex, 언리얼 엔진으로 만드는 신작 RuneScape MMO RS4 공개. 출시까지 몇 년러시아가 발전소를 때려도 미콜라이우 수돗물이 나온 이유는 덴마크 지원 오프그리드 태양광쓰레기통 6개에 UWB 태그 붙여 "내놨는지" 확인하는 BinRangeLiDAR로 찾은 뉴욕시 최고 높이 나무 후보 4그루, 20년 넘은 기록 갱신 제안Nolan Lawson이 본 '플랫폼을 쓰라'는 말이 안 먹히는 이유: jQuery 시대의 습관, 문서화 격차, 직접 만드는 재미에이전트에 필요한 건 메모리가 아니라 문서라는 주장, 메모리 플러그인은 전부 RAG라는 지적EMT 자격을 딴 소프트웨어 엔지니어가 꼽은, EMT가 되지 않은 21가지 이유 순위로댕 미술관 3D 스캔 소송, 콩세유 데타가 포인트 클라우드를 비문서로 재분류현직 전기공의 반박: 대학 순등록금은 연 $2,500 미만, 임금 프리미엄은 여전히 대졸 쪽HN: 'Triumph of the Nerds' 제작자 밥 크링글리 별세, 애플 초기 직원 출신사이먼 윌리슨 "사용량 기반 서비스엔 기본 하드 예산 상한 필요"... AWS·구글 클라우드 지출 한도 도입OpenAI 안전 리더 데이비드 로빈슨 사임, "문화가 망가졌다" 경고얀 르쿤 "AI가 인류 멸망시킬 우려 전혀 없다", 아모데이는 '현혹된 상태'라고 비판OPM 국장이 '모범 연방 직원'으로 지목한 20세 DOGE 출신, 최소 6개 주에서 형사 책임 위험밸브 Timur Kristóf, GCN 1.0/1.1 구형 AMD GPU를 AMDGPU 커널 드라이버로 끌어올린 작업 XDC 2026에서 발표Cloudflare, Workers와 Artifacts로 차세대 Git 플랫폼 공모전 개최... 상금 $25k는 크레딧 지급 논란Opus 5.5 프롬프트 가이드: 'think carefully' 지우고 CLAUDE.md에 정지 규칙 넣으라고 권고

뉴스 알림

새 알림

내 알림

로그인하고 알림을 만들어 보시기 바랍니다.

전체 알림

Dune제욱 님AI제욱 님해커뉴스성현 님