독서인을 위한 연합우주 서비스 만들까...
박준규
@curry@hackers.pub · 318 following · 169 followers
darcs hub
- hub.darcs.net/vincent
Hackage
- hackage.haskell.org/user/JoonkyuPark
참 쉽죠?
박준규 @curry@hackers.pub
하스켈(Haskell) 프로젝트를 처음 시작하는 사람들을 위해, `cabal`을 이용한 간단한 실행 파일 생성 과정을 소개합니다. 이 글은 `ghc`와 `cabal`이 `ghcup`을 통해 이미 설치되었다는 전제하에, 프로젝트 디렉터리 생성부터 기본적인 파일 구조 초기화, 그리고 빌드 및 실행까지의 단계를 최소한의 노력으로 빠르게 따라 할 수 있도록 안내합니다. `cabal init` 명령어를 사용하여 프로젝트를 초기화하고, 생성된 `app/Main.hs` 파일을 통해 "Hello, Haskell!"을 출력하는 예제를 통해 하스켈 개발의 첫걸음을 쉽게 내딛을 수 있도록 돕습니다. 이 글은 복잡한 설정 없이 하스켈 프로젝트를 시작하고 실행하는 기본적인 방법을 제시하며, 독자들이 하스켈의 세계에 더 쉽게 접근할 수 있도록 돕는 것을 목표로 합니다.
Read more →폰팔이 차팔이 용팔이라는 말이 너무 웃김 ㅋㅋ...
틀린 말이 아니기도 한데 흠
폰팔이 차팔이 용팔이라는 말이 너무 웃김 ㅋㅋ...
틀린 말이 아니기도 한데 흠
깐부치킨에서 결제를 삼성카드로 했냐 현대카드로 했냐 그래픽카드로 헀냐도 있던데
해커스펍 커모지로 언어&프레임워크 로고 추가해주세요
박준규 shared the below article:
"expression"은 "표현식"이 아니라 그냥 "식"
蛇崩 (じゃくずれ) @ja@hackers.pub
이 글은 프로그래밍 용어 "expression"을 "표현식"이 아닌 간결한 "식"으로 번역해야 한다고 주장합니다. 필자는 "expression"이 수학에서 유래되었으며, 수학에서는 이미 "식"으로 번역되어 사용되고 있음을 지적합니다. 또한, 프로그래머들이 "표현식"을 선호하는 이유로 사전적 정의와 초·중등 교육에서 비롯된 선입견을 들지만, 실제로는 "식"으로 번역해도 의미 전달에 전혀 문제가 없다고 강조합니다. 오히려 "표현식"은 "representation"의 번역어인 "표현"과 혼동될 수 있으며, "정규표현식"과 같이 불필요하게 긴 용어를 만들어낼 수 있다고 비판합니다. 결론적으로, 필자는 "expression"을 "식"으로 번역하는 것이 더 정확하고 간결하며, 전산학 용어의 일관성을 유지하는 데 도움이 된다고 주장하며, "정규식"이라는 간결한 용어 사용을 옹호합니다.
Read more →《하스켈로 배우는 프로그래밍》(2009, 대림) 옮긴이의 말
박준규 @curry@hackers.pub
이 글은 2009년 출간된 《하스켈로 배우는 프로그래밍》의 옮긴이 머리말을 공유한 것으로, 하스켈이 단순한 학술적 언어를 넘어 실무적인 범용 언어로 발전한 배경과 그 우수성을 설명합니다. 다양한 업계에서 상용 소프트웨어의 핵심 기술로 활용되는 하스켈은 효율적인 컴파일 언어이면서도 스크립트 언어처럼 빠른 개발이 가능하며, 안전한 정적 타입 언어이면서도 동적 타입 언어처럼 유연한 특징을 지닙니다. 특히 타입 클래스라는 독특한 기능을 통해 코드의 확장성을 높이고, 오브젝트 중심 언어의 인터페이스보다 더 유연하게 대처할 수 있음을 강조합니다. 하스켈은 프로그래밍 언어 연구 성과를 충실히 반영하여 개발 효율성과 코드 안정성을 동시에 추구하는 IT 전문가들에게 매력적인 선택이 될 수 있으며, 이 글은 하스켈의 장점을 다양한 예시와 함께 소개하여 독자들이 하스켈에 대한 이해를 높이고 더 깊이 있는 학습으로 나아가도록 안내합니다.
Read more →
박준규 shared the below article:
안녕 세계!
김태희 (탐정토끼) @stelo_kim@hackers.pub
일론 머스크에 대항하여 자유/오픈소스 생태계를 지키기 위해 Fediverse 활동을 시작하려는 여정을 소개합니다. 기존 해커스펍 계정을 활용하여 글을 작성하고, 트위터에는 미리보기 링크를 공유하는 방식으로 소통할 계획입니다. Fediverse에서의 활동을 통해 자유와 오픈소스 가치를 옹호하고, 더 많은 사람들과 교류하며 기여할 수 있기를 기대합니다.
Read more →한국의 함수형 프로그래밍 컨퍼런스 LiftIO 2025가 슬슬 열린다고 한다.
- liftIO 2025 연사 신청 링크: (https://forms.gle/RsmowMdtNxH1Pchc6)
- 컨퍼런스 신청 링크(https://event-us.kr/liftioconf/event/114005)
하스켈에서 레코드 타입을 json으로 인코딩할 때 타입이 Maybe인 필드의 값이 Nothing이면 그 타입의 값은 null로 변환된다.(deriving Generic 했다면)
이때 null이 아니라 해당 필드 자체를 포함하지 않게 하려면 다음과 같이 하면 된다.
{-# LANGUAGE TemplateHaskell #-}
import Data.Aeson.TH
data Foo = ...
deriveJSON defaultOptions { omitNothingFields = True } ''Foo
위와 같이 deriveJSON 했다면 기존에 선언했던 아래 구문은 지워야 한다.
instance FromJSON Foo
instnace ToJSON Foo
지인이 오타를 제보해주셨는데 수정이 안 되네…
instnace -> instance
하스켈에서 레코드 타입을 json으로 인코딩할 때 타입이 Maybe인 필드의 값이 Nothing이면 그 타입의 값은 null로 변환된다.(deriving Generic 했다면)
이때 null이 아니라 해당 필드 자체를 포함하지 않게 하려면 다음과 같이 하면 된다.
{-# LANGUAGE TemplateHaskell #-}
import Data.Aeson.TH
data Foo = ...
deriveJSON defaultOptions { omitNothingFields = True } ''Foo
위와 같이 deriveJSON 했다면 기존에 선언했던 아래 구문은 지워야 한다.
instance FromJSON Foo
instnace ToJSON Foo
@hongminhee洪 民憙 (Hong Minhee)
역시 hollo는 갓 소프트웨어
@kodingwarriorJaeyeol Lee (a.k.a. kodingwarrior)
@hongminhee洪 民憙 (Hong Minhee)
아니, 여기서는 하스켈로 만든 Seonbi를 찬양해야…
하스켈에서 Either a b의 ToJSON 인스턴스 구현이 약간 애매하다.
json 객체의 키 값으로 "Left"나 "Right"를 넣는 것 같다. 그런 방식으로 사용하는 사람은 거의 없을 것 같은데... 아무튼 그래서 newtype은 쓰지 않고 인스턴스를 오버라이딩 하고 싶은데 대충 찾아보면 인터넷이나 LLM의 첫번째 대답은 OverlappingInstances 확장을 쓰라고 안내하는데 이건 deprecated 됐다. 대신 다음과 같은 프라그마(pragma)를 쓰면 된다.
OVERLAPPINGOVERLAPPABLEOVERLAPS
프라그마는 확장과 다른데 확장은 확장을 적은 파일 전체에 적용되지만 프라그마는 해당 인스턴스에만 적용된다.
다음과 같이 사용한다.
instance {-# OVERLAPPING #-} ToJSON a => ToJSON (Either Foo a) where
toJSON = ...
이렇게 하면 고아[1]를 만들었다며 컴파일러가 내 인성을 비난하겠지만 Either a b를 통째로 오버라이딩 한 것도 아니고 별로 문제가 될 것 같진 않다.
하스켈에서 타입이나 클래스가 정의된 모듈이 아닌 곳에 인스턴스를 선언할 때 그 인스턴스를 Orphan(고아) 인스턴스라고 한다. ↩︎
早晩間 블로그 글로 仔細히 풀겠지만, Fedify 프로젝트가 STF로부터 投資를 받게 되어, 제가 앞으로 約 一年 동안 Fedify 프로젝트에만 專念할 수 있게 되었습니다.
I'll write a detailed blog post soon, but I'm thrilled to share that Fedify has received investment from the Sovereign Tech Fund, which means I'll be able to focus exclusively on the Fedify project for the next year or so.
早晩間 블로그 글로 仔細히 풀겠지만, Fedify 프로젝트가 STF로부터 投資를 받게 되어, 제가 앞으로 約 一年 동안 Fedify 프로젝트에만 專念할 수 있게 되었습니다.
남들에게 알려주면 굉장히 재미있어할만한 코딩지식이 있을까?
- 하스켈 리포트: WellTyped에서 작성한 하스켈 생태계 활동 보고서
- 언어 서버: HLS(Haskell Language Server)
- 번역 링크: https://rosettalens.com/s/ko/haskell-ecosystem-report-june-august-2025
@2chanhaeng초무 흔히 탭 완성이라고 하는 걸 구현하는 겁니다!
@hongminhee洪 民憙 (Hong Minhee) @2chanhaeng초무 그걸 배워서 어딘가에 구현하시려고 하는 거군요!
IP/Port: 221.144.15.168:5900
Hostname: N/A
Client Name: HMI-8ed5
Location: Yeonggwang, Jeollanam-do, KR 🇰🇷
ASN: AS4766 Korea Telecom
VNC Password: 111111
ID: 13061028
Added to DB: 05/06/2025, 10:35:16 AM (UTC)
Last seen: 05/06/2025, 06:10:42 AM (UTC)
https://computernewb.com/vncresolver/browse#id/13061028
@vncresolver 한국 또 나왔네! 이건 현재 접속 안 됨.
기후위기로 지표가 살기 불가능해져서 모두 실내/벙커 내에서 생활하는 상황 등
모두 태양을 보지 않고 인공적인 빛으로 살게 되는 세상이 되면
지구의 모든 조명을 동기화하면 타임존을 하나로 통일해도 되지 않을까?
@pbzweihander쯔방
안녕하세요! 재밌는 상상이네요! 그때를 대비해서 우리 모두 아마추어 무선 자격증을 땁시다!
실은 아직도 Bash를 쓰고 있습니다…
@hongminhee洪 民憙 (Hong Minhee) macOS에서도 일부러 Bash를 쓰시는 건가요?
zsh 쓰지도 않고 써 본 적도 없는데 zsh에서 완성(completion) 함수 어떻게 만드는지 배우고 있음…
@hongminhee洪 民憙 (Hong Minhee) 어디서 뭘 배우고 계세요!ㅎㅎ
나중에 대국민담화로 전국민의 주민등록정보가 화재로 파괴되었다 어쩌구 이러는거 아니겠지
@z9mb1wwj Haskell
@arkjunJuntai Park 이번에는 국토교통부로 이송되었습니다.
본 민원은 국도77호선 관련 내용으로, 민원처리법 제16조(민원문서의 이송)에 따라 순천국토관리사무소로 이송합니다.
귀하께서 요청하신 둔병대교 VMS 운용 프로그램 사용자 접속 제한에 대해서는 최초 VMS 설치 시 운용하여 비밀번호가 노출됐던 프로그램은 삭제하고 내부 운용 프로그램 사용을 통해 관리자만 접근 할 수 있도록 조치하였음을 알려드립니다.
와, 진짜 이제 접속 안 됩니다! 국토교통부 공무원 여러분 고생하셨습니다.
@arkjunJuntai Park 이번에는 국토교통부로 이송되었습니다.
본 민원은 국도77호선 관련 내용으로, 민원처리법 제16조(민원문서의 이송)에 따라 순천국토관리사무소로 이송합니다.
귀하께서 요청하신 둔병대교 VMS 운용 프로그램 사용자 접속 제한에 대해서는 최초 VMS 설치 시 운용하여 비밀번호가 노출됐던 프로그램은 삭제하고 내부 운용 프로그램 사용을 통해 관리자만 접근 할 수 있도록 조치하였음을 알려드립니다.
와, 진짜 이제 접속 안 됩니다! 국토교통부 공무원 여러분 고생하셨습니다.
lens라이브러리의 타입들은optics(광학기구)라고 불립니다. 여기에는Prism,Lens,Iso,Traversal,Fold,Getter,Setter같은 것들이 포함됩니다. 이 이름들 중 일부는 빛의 굴절에 대한 말장난에서 비롯되었습니다. 예를 들어, 렌즈(lens)는 망원경이 풍경의 작은 일부를 시야 가득히 채워 보이게 해주는 것이고, 프리즘(prism)은 흰빛을 분리하여 그 구성 색들을 드러내 줍니다. 어느 정도는 은유가 담겨 있지만, 이런 이름들은 깨달음을 주기보다는 귀여운 쪽에 가깝습니다. 따라서 이름 자체에 너무 깊이 집중하는 것은 권하지 않습니다.
— 《Finding Success (and Failure) in Haskell》, 158쪽
하스켈백합
방금 따님이 폰으로 유튜브 쇼츠 넘기며 보는데
그 앞에서 마눌님이 개똥벌레 노래를 부르니
잠시후 개똥벌레 노래 부르는 쇼츠가 나옴 ㅋ
구글이 듣고 있다..
@draco드라코 안녕하세요. 저도 가끔 그런 섬뜩함(?)을 느끼곤 합니다.
@lionhairdino 엥, 저런 뉴스레터가 있군요?
@hongminhee洪 民憙 (Hong Minhee)
@lionhairdino 엥, 동의 안 구하고 게시해도 되는 걸까요? 원본 링크를 걸긴 했네요. 그러고 보니 저도 동의 안 구하고 트위터에 민희 님 글 올리고 그랬네요.
@arkjunJuntai Park 한국도로교통공단으로 민원을 넣었는데 전라남도 여수시로 민원이 이송되었네요.
@arkjunJuntai Park 이번에는 국토교통부로 이송되었습니다.
본 민원은 국도77호선 관련 내용으로, 민원처리법 제16조(민원문서의 이송)에 따라 순천국토관리사무소로 이송합니다.
http://logitext.mit.edu/main
재미있는 웹 앱 중 하나. 논건 대수(Sequent Calculus)를 사용해 1차 논리("모든 대상에 대해"나 "어떤 대상이 있어"를 서술할 수 있는 논리)의 명제를 상호작용을 통해 증명해 볼 수 있다.
예를 들어 A /\ B -> A (A 그리고 B이면 A이다)를 증명하려면
- 위 명제를 입력칸에 넣는다.
->를 눌러 명제 안의 "이면"을 증명에서 쓸 수 있는 가정(|-의 왼쪽에 있는 것)으로 바꾼다.- 가정의
A /\B를 눌러 "그리고"의 양 측에 해당하는 가정A와B각각을 얻는다. - 가정이나 결론의
A를 눌러 가정을 사용하는 것으로 증명을 끝낸다.
보다 입문자에게 친절한 설명은 http://logitext.mit.edu/tutorial 에서 읽어볼 수 있다.
무려 폰트도 바꿀수 잇슴 ㅋㅋㅋㅋㅋ
나는 매킨토시로 일기쓰는 사람이다 무섭지
@arkjunJuntai Park 국민신문고에 민원 신청했습니다.
@arkjunJuntai Park 한국도로교통공단으로 민원을 넣었는데 전라남도 여수시로 민원이 이송되었네요.
@curry박준규 뭔가 무시무시한 것을 본 느낌이네요. 게다가 비밀번호 1234로 공개접근이 가능하다니, 충격과 공포네요.😰
@arkjunJuntai Park 국민신문고에 민원 신청했습니다.
보안관제 서비스 알아보니 정말 최소 옵션으로 하면 월 8만원까지 해줄 수 있다는데...
이게 고민스러운게 비싼 것 같아도, 요새 개인서버 운영자도 해킹당하면 변호사 선임 고려해야하는데 이게 기본 300만원 깨진단말이지
그런거 생각하면 저렴한거 아닌가 생각이 들기도...
@gnh1201어둠사자 어떤 서비스를 관제하려고 하시나요?
???: 도로 전광판 중학생한테 다 털렸죠ㅋㅋㅋ
@lifi리피
안녕하세요. 진짜 이럴까봐 걱정입니다. 딱 그 그림 나오기 좋은 상황인데...
이거 위험하지 않나... 관리 주체가 어딜까? 경찰이 하나?
실제 매출 상관 없이, 문의오는 잠재 고객의 해외 비중이 높을 경우
한국무역협회 등 해외통상 분야와 관련이 있는 협회에 가입하는게 좋을까?
@gnh1201어둠사자 잘 모르겠으니까 일단 가입해보고 판단하면 좋을 것 같습니다.
레코드 생성자
박준규 @curry@hackers.pub
하스켈에서 레코드 타입을 다루는 다양한 관용구를 소개하는 글입니다. 레코드 생성 시 `NamedFieldPuns`나 `RecordWildCards` 확장 기능을 활용하여 코드를 간결하게 만들 수 있으며, 레코드 필드에 접근할 때는 접근자 함수, 패턴 매칭, 또는 `RecordDotSyntax` 확장을 사용할 수 있습니다. 일부 패키지에서는 레코드 생성자를 숨기고 스마트 생성자를 제공하여 API를 제어하기도 합니다. 저자는 스마트 생성자보다는 레코드 생성자를 직접 내보내는 방식을 선호하며, 이는 하스켈 입문자들의 진입 장벽을 낮추고 코드 기여를 활성화하는 데 도움이 된다고 주장합니다. 장기적으로는 언어 차원에서 기본값을 가지는 필드를 지원하여 레코드 타입 정의를 더욱 유연하게 만들 수 있을 것이라는 전망을 제시하며, 이 글은 하스켈 패키지 작성자와 사용자 모두에게 유용한 정보를 제공합니다.
Read more →너무 이른 시점에 일반화를 걱정하는 것은 위험할 수 있습니다. 자신이 코드를 작성하든 다른 사람의 코드를 이해하려 하든, 우리는 이 책에서 취한 접근 방식을 따를 것을 권장합니다. 즉, 일반적인 것부터 시작하지 말고 구체적인 예시부터 시작하세요. 그런 다음 그들이 어떤 측면을 공유하는지 관찰하세요. 학습자로서 이러한 순서는 더 쉬운 구체적인 예시를 토대로 더 어려운 추상적 개념을 이해할 기회를 더 많이 제공합니다. 저자로서 이러한 순서는 더 추상적인 발상이 타당성을 갖고 목적을 지닐 수 있도록 도와줍니다.
— 《Finding Success (and Failure) in Haskell》, 149쪽
오픈소스 서밋 코리아 세션 리스트 공개됐네요
하스켈을 잘 모르는 프로그래머도 이해하기 쉬운 하스켈 코드 작성법
박준규 @curry@hackers.pub
이 글은 하스켈 코드의 가독성을 높이기 위한 실용적인 팁을 제시합니다. 저자는 하스켈 입문자들이 흔히 겪는 어려움을 해결하고, 코드를 더 쉽게 이해할 수 있도록 6가지 규칙을 제안합니다. 핵심은 달러 기호($) 사용을 자제하고, 연산자는 결합 가능한 것만 사용하며, do 표기법을 적극적으로 활용하는 것입니다. 또한, 렌즈 라이브러리 사용을 미루고, where와 let을 사용하여 코드를 구조화하며, 포인트 프리 스타일을 적절히 사용하는 것이 중요하다고 강조합니다. 이러한 규칙들을 따르면 하스켈 코드가 더욱 명확해지고, 함수형 프로그래밍에 익숙하지 않은 개발자들도 쉽게 이해할 수 있게 됩니다. 이 글은 하스켈의 진입 장벽을 낮추고, 더 많은 사람들이 이 언어를 배우고 활용할 수 있도록 돕는 데 기여합니다.
Read more →연구자로서, 또한 한 명의 개발자로서 현 세대에 항상 궁금한 것은 AI가 얼마나 도움이 되느냐이다.
Haskell, OCaml은 말할 것도 없고, JavaScript, Python도 AI와 써 본 경험으로는 그들이 큰 도움이 되느냐는 질문에 자신있게 "그렇다"고 하기 힘든 경험만 해봤기 때문이다.
내가 코드의 형식에 대한 집착이 너무 심한 것이 원인일 수는 있겠으나... AI가 준 결과를 여기 바꾸고 저기 바꾸다보면 결국 내가 쓴 처음부터 코드가 된다.
얼핏 드는 생각으로는 거의 "타입도 없고 문서화도 잘 안되어 있는 환경에서는 사람들이 기능을 이해하기 어려우니 AI를 쓰겠다..."싶다가도, "그러면 내가 잘 아는 분야에 대해서 왜 AI를 써야하지?"하는 생각도 떨치기 힘든 상황이 자주 찾아온다.
결과적으로 나는 AI를 사용하려는 시도를 (적어도 일시적으로는) 멈추었다.




