0001 익명 2021/12/17(금) 12:57:26.37
함수형 프로그래밍 언어 Haskell에 대해 이야기하는 스레드입니다.
Haskell Language(공식 사이트) https://www.haskell.org/ 일본 Haskell 사용자 그룹 - Haskell-jp https://haskell.jp/
이전 스레드 함수형 프로그래밍 언어 Haskell Part33 https://mevius.5ch.n...cgi/tech/1581326256/ ID:NPioGyUL(1/4)
0002 익명 2021/12/17(금) 12:57:57.45
과거 스레드 목록 32) https://mevius.5ch.n...cgi/tech/1548720347/ 31) https://mevius.5ch.n...cgi/tech/1506447188/ ID:NPioGyUL(2/4)
0003 익명 2021/12/17(금) 12:58:25.90
- http://mevius.2ch.ne...cgi/tech/1484491434/
- http://peace.2ch.net...cgi/tech/1436869629/
- http://peace.2ch.net...cgi/tech/1428535861/
- http://peace.2ch.net...cgi/tech/1420718555/
- http://peace.2ch.net...cgi/tech/1406436392/
- http://peace.2ch.net...cgi/tech/1393313450/
- http://toro.2ch.net/...cgi/tech/1382705669/
- http://toro.2ch.net/...cgi/tech/1376111807/
- http://toro.2ch.net/...cgi/tech/1364009659/
- http://toro.2ch.net/...cgi/tech/1358702176/
- http://toro.2ch.net/...cgi/tech/1350428908/
- http://toro.2ch.net/...cgi/tech/1340760070/
- http://toro.2ch.net/...cgi/tech/1331902463/
- http://toro.2ch.net/...cgi/tech/1325510368/
- http://toro.2ch.net/...cgi/tech/1317958045/
- http://hibari.2ch.ne...cgi/tech/1310199414/
- http://hibari.2ch.ne...cgi/tech/1299385928/
- http://hibari.2ch.ne...cgi/tech/1286706874/
- http://hibari.2ch.ne...cgi/tech/1272536128/
- http://pc12.2ch.net/...cgi/tech/1252382593/
- http://pc12.2ch.net/...cgi/tech/1231861873/
- http://pc11.2ch.net/...cgi/tech/1211010089/
- http://pc11.2ch.net/...cgi/tech/1193743693/
- http://pc11.2ch.net/...cgi/tech/1174211797/
- http://pc11.2ch.net/...cgi/tech/1162902266/
- http://pc8.2ch.net/t...cgi/tech/1149263630/
- http://pc8.2ch.net/t...cgi/tech/1140717775/
- http://pc8.2ch.net/t...cgi/tech/1076418993/
- http://pc2.2ch.net/t...cgi/tech/1013846140/
- http://pc.2ch.net/te...o/996/996131288.html ID:NPioGyUL(3/4)
0004 익명 2021/12/17(금) 12:58:57.67
관련 사이트 (영어) Haskell - Wikibooks, open books for an open world (페이지 내에 내용을 정리한 PDF 있음) https://en.wikibooks.org/wiki/Haskell
Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』의 무료 온라인 버전) http://learnyouahaskell.com/chapters
Real World Haskell (동명 서적의 무료 온라인 버전) http://book.realworldhaskell.org/read/
(이하, 일본어) Haskell 입문 5단계 - HaskellWiki (공식 사이트 내, 일본어 입문 섹션) https://wiki.haskell...86%E3%83%83%E3%83%97
Haskell - Wikibooks (위 Wikibooks의 동일 제목 일본어판. 많은 항목이 미편집) https://ja.wikibooks.org/wiki/Haskell
A Gentle Introduction to Haskell, Version 98 http://www.sampou.or.../haskell/tutorial-j/
Haskell 공부 http://www.shido.info/hs/
즐거운 Haskell 프로그래밍 입문 http://www.nct9.ne.j.../func/haskell39.html
진정한 프로그래머는 Haskell을 사용한다 http://itpro.nikkeib...UMN/20060915/248215/
[입문]함수형 프로그래밍―질 높은 코드를 빠르게 직관적으로 쓸 수 있다! http://gihyo.jp/dev/...e/01/functional-prog ID:NPioGyUL(4/4)
0005 1 2021/12/19(일) 03:10:48.56
전설의 오카베 켄이 부활!! https://twitter.com/ken74047924
(추가 정보) Quora에서도 유명했던 오카베 켄, 2021년 12월 트위터 계정 또다시 영구 정지됨. 당시 아카이브는 조금 인터넷에 남아있는 듯
https://twitter.com/KenSmooth5 https://i.imgur.com/Ws4RM1o.png https://twitter.com/5chan_nel (5ch newer account) https://twitter.com/5chan_nel (5ch newer account)
ID:7grgB8Yx
0006 익명 2021/12/20(월) 09:52:21.45
https://qiita.com/mo...a6317294ba1e39b1c3b3
댓글에 털벽 등장 3 ID:ZumN5JOf
0007 익명 2021/12/20(월) 12:58:58.75
6 저 녀석 또 실명 비슷한 거 써서 난동 부리고 있네 ID:oUGNvHUz
0008 익명 2021/12/20(월) 20:14:33.16
스스로 소환해놓고 난동이라고 하지 마. ID:ceMzU2Ib(1/3)
0009 익명 2021/12/20(월) 20:19:16.57
Haskell 얘기 아니니까 다른 데 가서 해 ID:NqO2QdlG(1/2)
0010 익명 2021/12/20(월) 20:33:12.76
Excel VBA 스레드에서 할까? ID:ceMzU2Ib(2/3)
0011 익명 2021/12/20(월) 21:06:24.55
털벽으로부터 국민을 지키는 당 72번째 의석 https://lavender.5ch....cgi/net/1615613906/ ID:NqO2QdlG(2/2)
0012 익명 2021/12/20(월) 23:17:06.32
72번째 스레드라고? 스스로는 미쳐있는 걸 모르겠지. 국민을 지켜야 한다!는 사명감이 넘쳐흘러서 72개 스레드. ID:ceMzU2Ib(3/3)
0013 익명 2021/12/21(화) 00:08:10.53
본인? ID:S6JYHyb7
0014 익명 2021/12/21(화) 06:55:32.78
a :: Int -> Int a 0 = 50^2 a n = round (sqrt (realToFrac n):: Float) 형 변환 눈물 나온다 ghci 프롬프트에서는 round (sqrt 50) 7 제대로 나오잖아... 1 ID:t7n7AMl6
0015 익명 2021/12/21(화) 10:17:23.12
6 너무 심하다 ID:WtPb4PP+
0016 익명 2021/12/21(화) 11:09:52.33
14 ghci에서 :t round . sqrt로 하고 a :: Int -> Int 와의 차이를 비교해보면 좋을 거야 (그리고 리터럴 50은 Int가 아님) 숫자(특히 부동소수점) 관련 함수에서 눈물 나오는 건 어느 정도 동의 ID:+QFtbkZ1
0017 익명 2021/12/21(화) 15:10:59.44
6 이, 이건 설마.... 그?! ID:XC3saJz0
0018 익명 2021/12/23(목) 17:28:45.18
ken80297274
오카베 씨 부계정 발견 ID:iaSGtOUq
0019 익명 2021/12/23(목) 20:30:31.33
어떤 인생을 살면 실명으로 저렇게 공격적인 어조로 트위터에서 불특정 다수에게 시비 걸 생각을 할 수 있을까 실제로 현실에서 만나면 어떤 느낌의 사람일까 ID:hyDq6lCn
0020 익명 2021/12/23(목) 21:25:57.12
오카베 켄 씨는 미국의 UCLA 졸업이라고 썼던 것 같아서, 정보 기술 소양은 있지 않을까?
https://twitter.com/...s/226163166067949568
「뭐 그걸로 UCLA라니 거짓말 잘도 하네요ー. 」 는, 이것도, 제가 학력 위조를 하고 있다는 노다 켄타로의 망상에서 시작된 「비난에 사용하는 좋아하는ネタ」이며, 물론 그런 학력 위조 사실은 없고, 그것도 명예훼손으로 형사고소 요건에 들어가 있다. https://twitter.com/5chan_nel (5ch newer account) ID:cmpFYqPS(1/2)
0021 익명 2021/12/23(목) 21:27:02.59
트위터에서
ohagiya UCLA
로 검색하면 오카베 켄 씨의 학력에 흠을 잡고 있는 사람이 나오네 ID:cmpFYqPS(2/2)
0022 익명 2021/12/23(목) 23:57:52.67
할리우드 영화에 자주 나오는, 술집에서 위트 넘치는 어른들의 대화의 일종 아닐까? 0시가 지나면, 술병을 깨고 주먹으로 이야기하는... 지금 그 상태 아닐까? 아침이 밝으면, 서로를 이해하고 유대가 깊어지는. 그리고 평생의 친구가 되는 거 아닐까? ID:MjSWMWRR
0023 익명 2021/12/27(월) 09:38:29.17
https://ken-okabe .hatenablog .com/entry/2021/12/20/134121
『결국에는, 뜻밖에도, 당시 Qiita 운영이 이런 익명 염상 목적의 계정의 의도에 휘말리는 형태로, 제 반론 댓글을 삭제해버렸기 때문에』
라고 쓰고 있으니까, 당시 nonstarter 씨의 게시글 댓글란에 출몰했던 건 오카베 켄 본인이었던 것 같네. 매번 "오카베 씨"라고 다른 사람처럼 쓰고 있었는데 ID:hZ17KgJk
0024 익명 2021/12/28(화) 01:15:18.08
고급 IT 인재, 후지쯔는 최대 연봉 3500만 엔으로
"후지쯔 연봉 3500만!" 일본 IT 기업의 연봉도, 고액화되어 왔습니다
AI 인재 확보에 초 진심 NEC는 신인사제도를 9명에게 적용, 후지쯔는 최대 연봉 3500만 엔으로
【연봉 3500만 엔도】후지쯔, "직무형" 인사제도를 도입 간부 사원부터 고급 IT 인재
내년도부터 부업 해금 인재 다양화를 위해―다이도 생명 차기 사장
부업・겸무 해금으로부터 4년, 로토 제약 방식으로 추진하는 커리어 지원
로토 제약이 부업을 가장 먼저 도입한 "초인간적인" 이유
로토 제약 회장이 "부업을 받아들이지 않는 회사는 발전하지 않는다"고 단언하는 이유 ID:e4meyx5L
0025 익명 2021/12/28(화) 08:27:45.42
https://mobile.twitt...s/172883696091791361 https://twitter.com/5chan_nel (5ch newer account) ID:FaceSKSV
0026 익명 2021/12/31(금) 02:20:27.03
간단한 단어 카운트를 썼는데 함수 합성으로 단어 카운트를 만들 수 없습니다 " ab ccc dd "를 [0,1,1,0,1,1,1,0,1,1,0] 같은 리스트로 변환해서 단어의 수는 3처럼 이하는 일반적으로 쓴 단어 카운트 spwc4 :: [Char] -> Int spwc4 s = wc4 s 0 0 where wc4 :: [Char] -> Int -> Int -> Int wc4 [] l c = (c + (if l == 0 then 0 else 1)) wc4 (x:xs) l c | x == ' ' || x == '\t' || x == '\n' || x == '\r' = if l == 0 then wc4 xs 0 c else wc4 xs 0 (c+1) | otherwise = wc4 xs (l+1) c
문자열을 chkspand :: Char -> Int chkspand c = if c == ' ' || c == '\t' || c == '\n' || c == '\r' then 0 else 1 에 넣어서 [0,1,1,0,0,1] 같은 리스트로 변환 이것을 함수 합성으로 카운트하면 내부 상태를 유지할 필요가 있어서 곤란해하고 있습니다 wordcount . map chkspand $ " asas df df" 같은 식으로 쓰고 싶습니다 ID:aP8qPSMg(1/5)
0027 익명 2021/12/31(금) 03:53:55.07
스스로 해결했는데 데이터가 많으면 스택이...
countword . countchars . map chkspand $ " 1313 13 111 rfr fdf" 5 ID:aP8qPSMg(2/5)
0028 익명 2021/12/31(금) 14:45:34.52
리스트 같은 단순 데이터 생성자라면, 아무리 길어도 스택과 관계없는데 리스트를 foldr한 것 같은 게 나오면 스택 때문에 다들 넘어지지 ID:KqmzC1Ir
0029 익명 2021/12/31(금) 14:58:51.96
처음부터 쓴다면 (0:)로 0을 추가해서 (0:1:_)를 카운트해나가겠지
chkspand :: Char -> Int chkspand c = if c == ' ' || c == '\t' || c == '\n' || c == '\r' then 0 else 1
wordcount = let iterator [ ] = 0 iterator ( 0: 1: xs ) = 1 + ( iterator xs ) iterator ( x : xs ) = iterator xs in iterator . ( 0 : )
main = do print $ map chkspand $ " asas df df" print $ wordcount . map chkspand $ " asas df df" 1 ID:bqUePCKa(1/2)
0030 익명 2021/12/31(금) 16:30:35.01
29 wc5 = let iterator [] = 0 iterator (0:1:xs) = 1 + (iterator xs) iterator (x:xs) = iterator xs in iterator . ((0::Int) :)
wc5 . map chkspand $ "0 hushjuh hhuj 89 546456" 5
잘 됐습니다 이터레이터 패턴 매칭 신기하네 3 ID:aP8qPSMg(3/5)
0031 익명 2021/12/31(금) 20:42:25.11
30의 이거 iterator (0:1:xs) = 1 + (iterator xs) 내부에서 1+1+1+1+...가 쌓여서 마지막에 계산되는 거야? 1 ID:aP8qPSMg(4/5)
0032 익명 2021/12/31(금) 20:58:03.01
31 그건 처리계의 구현 의존이라 단정 지을 수 없지만 아마 스택 위에 (1+) 함수가 올라가서 마지막에 확정된 0이 들어가고 나서 계산할 것 같아 1 ID:bqUePCKa(2/2)
0033 익명 2021/12/31(금) 21:10:21.51
32 알겠습니다 ID:aP8qPSMg(5/5)
0034 익명 2022/01/02(일) 20:44:02.99
30 살짝 변형 wc6 = let iter n [] = z iter n (False:True:xs) = let n' = n + 1 in seq n' $ iter n' xs iter n (x:xs) = iter n xs in (iter 0) . (False :)
wcc = wc6 . map chkspand2 이 seq n'가 효과가 있으면 +1+1+1+1이 쌓이지 않을 거야 4 ID:OOMiLRw0(1/2)
0035 익명 2022/01/02(일) 21:09:40.82
ghci에서 확인
30은 스택 오버플로로 멈췄다 34는 멈추지 않아서 Ctrl-C로 멈췄다 ID:OOMiLRw0(2/2)
0036 익명 2022/01/03(월) 00:17:58.15
OOP에서도, 정수를 다른 객체와는 완전히 다른 형식으로 하지 않으면 계산이 너무 느려서 촌스러워지지
반대로 객체 쪽을 정수와 같은 GC 비의존 같은 구조로 하는 방법도 있겠지 ID:eS7vipFo
0037 익명 2022/01/03(월) 08:08:25.82
뭐 이건 취향 나름 Haskell에서는 성능 면보다 가독성을 중시하니까 그것도 사용하는 사람 나름이지만
34처럼 하면 메모리도 시간도 절약할 수 있지만 가독성은 떨어지지 어디까지 참을지지만 나는 계산 시간도 메모리도 선형까지라면 참고 가독성을 중시할 거야 34だと 입력에 비례해서 요구되는 스택 양이 증가한다 선형까지라면 어쩔 수 없다고 생각해 어차피 입력이 커질수록 시스템이 커지는 건 원래 어쩔 수 없으니까 그때의 비례 상수 차이까지라면 참을게 지금 구체적으로 하고 싶은 게 있어서 그 선형 차수의 낭비조차 허용되지 않는 상황이라면 생각해보겠지만 1 ID:hLrwvjQQ(1/2)
0038 익명 2022/01/03(월) 11:20:12.64
37 이번 주제는 단어 카운트, 파일 크기가 기가가 되는 경우를 가정 스택이든 힙이든 소비하지 않는 방법은?입니다 C 등으로 구현한 경우, 루프로 카운트하고 재귀 없이 스택도 힙도 소비하지 않고... (가독성은...)
그 외에 멀티스레드로 분할 카운트했을 때의 방법 등 (디스크 IO 때문에 병목 현상이 생기려나) ID:TEX8BSo6(1/2)
0039 익명 2022/01/03(월) 12:59:34.38
이번 경우 단어 하나 소비할 때마다 스택 하나 소비하니까 필요한 메모리 자원이 두 배 이상이 될 가능성도 있어서 의미는 있을 거야 특히 이건 >>34의 방법だと 필요한 메모리 자원이 데이터 유지하는 분을 제외하면 로그 차수가 되니까 게다가 읽어온 데이터는 순차적으로 버릴 수 있고 (그때까지의 카운트 결과를 유지해야 하기 때문에 유한 오토마톤으로는 불가능하지만 유한 오토마톤 이상, 튜링 완전 이하, 이런 계산 클래스는 이름이 붙어 있나?) 개인적으로 이럴 때 메모리 선형, 시간 선형까지는 허용하지 않으면 별거 못 하는 경우가 많아서 그 이상의 집착은 가지지 않도록 하고 있어 수학적 연구 대상으로 삼는다면 모르겠지만 1 ID:hLrwvjQQ(2/2)
0040 익명 2022/01/03(월) 15:29:08.17
39 이번에 무엇을 확인했는가 그것은, C로 짜는 것 같은 단순 반복을 같은 감각으로 Haskell의 지연 평가로 햐아 하고 하면 위험하다는 교훈과 그것을 회피하는 방법 ID:TEX8BSo6(2/2)
0041 익명 2022/01/04(화) 16:11:04.31
Haskell을 익힌 사람은 다른 언어도 사용할 수 있다고 생각하는데, 여러 언어 중에서 Haskell을 선택해서 프로그램을 쓰는 건 어떤 과제, 문제를 해결하고 싶을 때인가요 ID:h755Av8k
0042 익명 2022/01/04(화) 16:44:18.80
과제가 "가비지를 수집하고 싶다" 뿐이라도 그럼 정적 타입은 필요 없다든가 제네릭스는 필요 없다가 되지는 않지 그래서 과제와 관계없는 부분을 만들어 넣지 ID:HuVGMWib
0043 익명 2022/01/05(수) 10:28:01.47
트위터 검색창에
@ohagiya @kenokabe
라고 넣으면 재밌다 1 ID:imDyM2+l
0044 익명 2022/01/11(화) 17:47:50.88
43 너무 심하잖아 이거 불쌍해 ID:rZde0CTm
0045 익명 2022/01/14(금) 10:48:22.13
최신 괴문서도 읽어봤는데 말이지, 털벽은 매번 매번 기세만 좋단 말이야 ㅋㅋ 예를 들어 "치쿠와는 민사로도 할 거야!" "치쿠와는 이제 끝장이야" (9년 전) "치쿠와는 이제 빈사 상태야" (7년 전) 같은 거 말이지. 빈사 상태인데, 얼마 전에도 블로그에서 원한 섞인 말을 ㅋㅋ 쥐 한 마리, 처리 못 하다니 한심하네 ID:3PF6dXYX
0046 익명 2022/01/15(토) 18:49:30.83
질문입니다 array와 List의 성능 차이가 잘 와닿지 않습니다 뭔가 "이 예시에서는 어떻게 생각해도 array, 봐, 이렇게 성능 차이가 나잖아" 같은 예시 아시는 분 없나요? ID:chCIM2fB
0047 익명 2022/01/16(일) 12:22:44.80
질문입니다 어떤 글에서
square x = x*x print $ square $ square 3
같은 프로그램을 Haskell은 square $ square 3 → square ( square 3 ) → ( square 3 ) * ( square 3 ) → ( 3 * 3 ) * ( 3 * 3 )
처럼 된다 이걸 피하려면 seq를 사용하면 된다고 했는데 시험 삼아
import Debug.Trace
square x = x * x const3 = trace "*" 3 main = do print $ square $ square $ square $ square $ square $ square $ square $ square $ square $ square $ square $ square $ square $ square $ square $ const3
같은 프로그램으로 시험해봤습니다 설명대로라면 const3가 2^15번 호출되어서 *가 잔뜩 나와야 할 것 같은데, 해보니까 *는 하나밖에 안 나옵니다 이건 왜 그런가요? 참고로 ghc입니다 ghc가 const3의 결과를 스스로 "메모화"해서 알아서 처리해주는 건가요? ID:f2QwXzzi(1/4)
0048 익명 2022/01/16(일) 13:40:56.61
메모화는 독자 구현이 아니라 사양
어떤 글은 거짓말 하지만 속은 적이 없으니까 피해는 존재하지 않고, 가해자도 존재하지 않아 1 ID:rC9oNTrC
0049 익명 2022/01/16(일) 14:36:08.72
48 사양인가요? Language Report 같은 데 써있나요? ID:f2QwXzzi(2/4)
0050 익명 2022/01/16(일) 14:39:15.35
어떤 글은 "워크스루 Haskell"이라는 겁니다
http://walk.northcol...ell/eval-strategies/
3이 아니라 1 + 2로 하고 있었어요 ID:f2QwXzzi(3/4)
0051 익명 2022/01/16(일) 18:39:45.50
seqだと 결과는 어떻게 되나요? 1 ID:ZlAL8rfa
0052 익명 2022/01/16(일) 18:54:16.95
51
square x = x * x
를
square x = seq x $ x * x
로 해서 명시적으로 "x를 평가하고 나서 x*x를 계산해라"로 바꾸면 물론 * 하나입니다 그건 납득이 갑니다 워크스루 Haskell에도 그렇게 된다고 써있고 Haskell Language Report 2010에도 seq로 엄격 평가가 된다고 써있습니다 그래서 이건 납득이 가는데 seq 없는 경우의 동작이 문서와 다르게 보입니다 물론 참조 투명성이 있으니까 한 번 계산한 결과를 메모화해서 재사용해도 같은 답이 나와야 하니까 답 자체는 같아지지만 이건 우연히 GHC 개발자가 훌륭해서 Haskell 표준 동작으로는 보장되지 않는 것까지 해주는 것뿐인지, 표준 동작으로 메모화해야 하는 건지 어느 쪽일까 하고 지금은 지금 제가 공부하고 있는 프로그램에는 seq를 넣어서 명시적으로 엄격 평가를 시키고 있는데 표준으로 메모화해준다면 지울 수 있고 깔끔해지고, 아니면 명시하지 않으면 다른 처리계에서는 해주지 않는다면 남겨두지 않으면 안 되고 ID:f2QwXzzi(4/4)
0053 익명 2022/01/17(월) 04:24:56.47
은색 총알 Haskell을 IT 기업이 채택하면 시장을 석권할 수 있지 않을까???
실제로 그렇게 될 거라고 생각해? ID:FNscPcIY
0054 익명 2022/01/17(월) 13:17:04.94
Windows 10에 VSCode 깔고, Haskell 갖고 놀려고 했는데 잘 안 깔리네.
명령줄에서 세세하게 깔고 놀아야 하나. ID:3dpBVALW
0055 익명 2022/01/18(화) 00:23:47.53
https://www.haskell.org/ghcup/
GHCup is an installer for the general purpose language Haskell. ID:1uCkeDxh
0056 익명 2022/01/27(목) 08:50:29.18
https://qiita.com/lu...baa68e681872de44d5f8
댓글 끔찍하네 @stken2050(이거 오카베 켄)이 너무 심해서 여러분 신고해주세요 2 ID:NJ4yaxSd
0057 익명 2022/01/27(목) 10:10:34.06
털 씨는 예전부터 여러모로 심했지만
56 댓글만 보면 단순히 @Zuishin이 불리해 보이네 이상한 자기만의 용어는 빨리 싹을 잘라야 돼 ID:orDFdZXN
0058 익명 2022/01/27(목) 11:59:44.42
오카베 씨 안녕하세요 ID:oUTYjCet
0059 익명 2022/01/27(목) 12:03:44.88
https://twitter.com/...s/322296035147935744
인용 「Linux의 기반이 된 MINIX가 부활 중. 기대됨.」이라는 자칭 긱과의 이야기』의 아카이브를 남겼습니다 http://nmuta.dip.jp/~muta/toog237.pdf https://twitter.com/5chan_nel (5ch newer account) ID:eY59BLQP
0060 익명 2022/01/27(목) 23:00:32.74
그게 아니라, PHP나 Haskell 따위가 잘난 척하지 마라는 거겠지. 질문자가 오면 차나 과자 정도는 내놔. 하찮거나 마이너 언어는 그렇게 해야 돼. 1 ID:7u9WcLA6
0061 익명 2022/01/28(금) 01:07:24.72
누군가를 깎아내리는 것보다, 이런 얘기가 더 재밌지 않아? https://www.reddit.c...ication_space_leaks/ ID:dNnJMVwD
0062 익명 2022/01/28(금) 09:50:56.34
60 애초에 질문자가 왔다고 생각하지 않겠지 굳이 말하자면 "명령자"가 왔다고 생각하는 거겠지 ID:F+QYYxM3
0063 익명 2022/02/01(화) 14:44:50.86
Qiita 운영 뭐 하는 거야 이거
https://qiita.com/lu...ceab8639f8275f297563 1 ID:VXi8EI6O
0064 익명 2022/02/01(화) 15:19:04.39
https://twitter.com/...s/114732100682391552 https://twitter.com/5chan_nel (5ch newer account) ID:rr+/bjEX
0065 익명 2022/02/01(화) 18:35:16.11
56 다들 누군지 모르겠고 상관없지만 보니까, @Zuishin의 글은 확실히 허접한 글이지만, @stken2050의 반론에도 무리가 있네
@Zuishin은, 거창한 주장을 하고 있는데 근거가 꽤 허접해서, 글로서 가치가 낮아 보인다
@stken2050의 반론은, "배타적이지 않으니까 반대가 아니다!"는 말은 너무 무리수야 "반대"라는 자연어 단어가 원래 애매모호하다는 건 누구나 아는 거니까, 그거에 대해서 자기 멋대로 엄격한 정의를 내리고, 그 정의에 따라서 모순을 지적했다고 하면, 당연히 "일본어 몰라요?" 소리 듣지
게다가 @stken2050의 반론에서는 위키피디아와 다른 고차 함수의 정의를 사용하고 있는데, 그렇다면 위키피디아보다 신뢰성이 높은 출처를 갖고 와서, 영어 위키피디아에 쓰여 있는 고차 함수의 정의에 의문을 제기하는 게 맞지 그걸 안 해서 논리적으로 이상해 보이는 거야 ID:e9RXuv9o
0066 익명 2022/02/02(수) 12:32:50.68
63 무사히, 글이 동결됐네 ID:4gWS4lIC
0067 익명 2022/02/04(금) 08:30:39.02
완전 어그로꾼이잖아 저거 ID:iaw7RH3I
0068 익명 2022/02/08(화) 08:58:59.73
Haskell은 일본인에게 먹힐 것 같아서 실제로 한때 화제였는데 결국 시들해졌네 왜 그럴까 ID:t2yWr+Jt
0069 익명 2022/02/08(화) 12:34:20.88
Haskell로 잠시 뭔가를 배우고 나면, 원래 있던 곳으로 돌아가는 거 아닐까 ID:iTFetD6R
0070 익명 2022/02/09(수) 10:14:27.54
타입과 GC가 시들해져서 타입 없으면 Python GC 없으면 Rust로 가지 1 ID:9eeUOmy1
0071 익명 2022/02/09(수) 10:49:56.61
타입이 시들해질 리가 있나? ID:Lp+6eS6t
0072 익명 2022/02/09(수) 13:51:00.40
70 안에서는 시들해졌겠지 ID:LMpY9ePh
0073 익명 2022/02/09(수) 14:32:04.90
둘 다 없으면 어디로 가야 돼? ID:4IAm5Mq6
0074 익명 2022/02/09(수) 16:30:45.01
둘 다 없으면 API랑 언어가 관계없는 클라우드 같은 느낌이 될 것 같아 ID:tjRbJd/i
0075 익명 2022/02/09(수) 19:00:25.72
C는 안 되는 거야? 그리고, 타입 없다는 게 아니라, 동적 타입이면 괜찮다면, Objective-C가 꽤 자유도가 높았던 것 같아. ID:/Rs/AQCx
0076 익명 2022/02/10(목) 14:08:35.36
단순히 어려워서겠지 원래 언어 사양은 간단한데, 소프트웨어 공학적인 노하우를 기반으로 OOP와 동등 이상의 구현을 실현하려고 하면, 갑자기 엄청난 GHC 확장과 난해한 타입이 나와서 뭔지 모르겠게 돼 ID:Rx8BtNec
0077 익명 2022/02/10(목) 17:05:47.42
lens 타입 같은 거 너무 복잡해 ID:0/0SR33O
0078 익명 2022/02/11(금) 01:01:15.27
setter의 존재 자체가 매너 위반이라고 하면 어떤 의미에서는 간단해 매너 위반해서 너무 복잡해진 건 자기 책임, 언어 탓하지 마 ID:oG7lMZNP
0079 익명 2022/02/12(토) 14:38:21.43
오카베 켄 1 ID:3EVMkjej
0080 익명 2022/02/12(토) 14:59:18.26
79 이 녀석에게 "H"는 무리(폭소)
"세 번 문지르기 반"으로 승천할 거야 ㅋㅋ ID:MmDcA0PA
0081 익명 2022/02/13(일) 02:50:13.95
GHC 방언 같은 지식이 풍부한 놈들은 어떻게 보면 반항적인 성격이라고 생각해 그런데, 오리지널 사양에 대한 충성심이 높으면 높을수록 유능하다는 오해가 있어
게다가 겉보기에는 충성심 없어 보이는 캐릭터까지 만들어져 있고 ID:gJE3VDE6
0082 익명 2022/02/14(월) 11:54:21.19
최근 수치 계산 공부하고 있는데, 요즘 자주 고속 푸리에 변환을 이용한 곱셈 고속화 같은 얘기가 나와 크기가 큰 정수의 곱셈 같은 걸 고속화하는 방법으로 자릿수 n끼리의 곱셈 비용을 n log(n)으로 줄이는 거라고 이거 GHC의 Integer 타입 곱셈에 응용되고 있나요? 역시 그렇게까지 속도에 집착하고 싶으면 직접 하는 게 맞는 건가? GHC 소스를 읽을 만한 실력은 없어서 잘 모르겠어 애초에 GHC 소스는 어디에 있나? 2 ID:4AqyxcJv(1/4)
0083 익명 2022/02/14(월) 20:10:36.04
82 ghc haskell 소스로 구글에 검색하면 나와 1 ID:TSLH56nb
0084 익명 2022/02/14(월) 20:56:01.04
소스를 한 줄도 안 읽어도 알 수 있는 게 몇 개 있어 Int와 Integer의 이도류가 가능하다면 삼도류도 가능하다는 거 두 번째 세 번째 타입을 추가하기 위해서 컴파일러를 컴파일하는 건 너무 의미 없다는 거 ID:uQiQyHca
0085 익명 2022/02/14(월) 21:36:02.36
82 못 찾겠어 ㅠㅠ
83 살짝 수치 계산 연습하고 싶어서요 예를 들어 원주율 10만 자리 같은 거 설마 10만 자리 같은 건 ghc가 기본적으로는 지원 안 해주려나 하고 가정해서 가능하다고 해도 10만 자리 × 10만 자리 계산으로 자릿수^2 차수로 계산하면 그 하나의 곱셈에 몇 년씩 걸릴 수도 있잖아 단순한 array나 list라면 10만 요소 정도는 다뤄줄 것 같지만 그냥 Haskell로 그런 대량 데이터를 다루는 건 여러모로 어려운 문제가 있다는 얘기는 들어서 지금까지는 "그런 건 Haskell은 안 맞아, 그럴 땐 C" 같은 식으로 구분해서 썼어 하지만 역시 Haskell로 못 하는 건 재미없으니까 Haskell로도 그런 큰 데이터를 다룰 수 있는 실력을 쌓고 싶다는 것도 있어 뭐 아직 FFT로 곱셈 프로그램 공부하기 시작한 지 얼마 안 돼서 갈 길이 멀지만 일단 [Double]의 FFT랑 역 FFT 만든 데까지는 했어 근데 거기까지 만들고 "어라? 혹시 이런 거 직접 만들지 않아도 애초에 Haskell의 Integer가 처음부터 FFT로 곱셈하고 있을지도? GHC 개발자 엄청 훌륭해 보이고"라고 생각했던 거야 ID:4AqyxcJv(2/4)
0086 익명 2022/02/14(월) 21:36:29.77
아, 앵커 하나 밀렸네 ID:4AqyxcJv(3/4)
0087 익명 2022/02/14(월) 21:54:21.41
GMP 쓰고 있을 수도 있고 안 쓰고 있을 수도 있다는 듯 [1] GMP 쓰고 있다면 FFT 기반의 Schönhage–Strassen이 작동할 거고 GMP 쓰고 싶다면 라이브러리 [2]가 있어 [1]https://stackoverflo...teger-multiplication [2]https://hackage.hask.../package/integer-gmp 1 ID:BjFXlOcH
0088 익명 2022/02/14(월) 23:13:34.14
87 오, 고마워 그렇구나 GMP라는 걸 쓰고 있구나
--Stack Exchange에서 GMP appears to use Schonhage-Strassen, but not until you start dealing with numbers with 10s of thousands of decimal digits.
GMP에서는 Schönhage–Strassen을 사용하는 것 같지만, 소수점 이하 자릿수가 몇 만 자리나 되는 숫자를 다루기 시작할 때까지는 그렇지 않은 것 같습니다.
--위키피디아에서 GMP는, 어떤 피연산자 크기라도 다른 다중 정밀도 정수 라이브러리보다 빠르다는 것을 목표로 하고 있다. 이를 위해, 다음과 같은 점을 중시하고 있다.
기본 산술형으로 풀워드를 사용한다. 피연산자 크기에 따라 각각 다른 알고리즘을 사용한다. 매우 큰 숫자에 효과적인 알고리즘은, 작은 숫자에서는 느린 경우가 많다.
즉 굳이 직접 Schönhage–Strassen 알고리즘을 구현하지 않아도 애초에 Integer로 구현되어 있다는 거네 그럴 줄 알았어 ㅋㅋ 그럴 만도 하지, 이렇게 훌륭한 소프트웨어가 수치 계산 이론의 최신 성과를 도입하지 않았을 리가 없어 ㅋㅋ 10만 자리 같은 거 Integer로 다룰 수 있나? 사실 Data.Fixed에 있는 Fixed a로 100자리 정도는 여유 있다는 건 확인했어 주말에 자릿수 늘려서 실험해볼게 고마웠어 ID:4AqyxcJv(4/4)
0089 익명 2022/02/15(화) 00:40:37.96
Haskell의 다중 정밀도 계산, 예전에는 힘들었는데 지금은 좋아졌다, 같은 글이 10년 전쯤에 쓰여 있었어 http://tanakh.jp/pos...s/2012-03-08-pi.html 1 ID:2crEr/EW
0090 익명 2022/02/15(화) 19:39:32.71
89 오, 선구자가 있었어 ㅋㅋ 이야~ Haskell은 속도를 추구한다면 그렇게 좋은 선택지는 아닌 것 같지만 역시 도전해보고 싶어지네 그 사람 페이지의 링크가 엄청 참고가 됐어 드디어 Chudnovsky 공식이라는 게 왜 최속인지 알았어 수렴 속도 자체는 어떻게 생각해도 AGM 쪽이 빠른데 왜 Chudnovsky 쪽이 빠른 건지 Binary Splitting이라는 기술을 써서 한꺼번에 계산하는 방법이 있구나 살짝 감동했어 뭐 아무튼 Integer 타입 계산으로 10억 자리까지 실용적인? 속도로 계산할 수 있는 거구나 천천히 해볼게 ID:ujR6VeHM
0091 익명 2022/03/28(월) 00:29:30.89
Haskell 예전에는 일본에서도 인기 있었는데 어쩌다 이렇게 됐지 1 ID:dN2icdd7
0092 익명 2022/03/28(월) 00:37:16.39
인기 없다는 거야? 당연하지? 쓰기 쉽다고는 말 못 하지 1 ID:NMG6YJEi
0093 익명 2022/03/28(월) 17:03:01.17
92 쓰기 불편하다고 느끼는 부분을 알려주세요 ID:o+cr0I/L
0094 익명 2022/03/28(월) 18:04:03.42
문자열 조작 패키지를 만들고 있어. 한 글자씩 평가해서 처리하는 건 되는데 루프로 구현하려고 하면, 잘 안 돼. [Char] 타입이랑 String 타입을 섞어서 만든 탓인지 바텀업 방식으로 만드는 게 잘못된 건지.
아직 초보자의 넋두리. ID:kSkV8rOb
0095 익명 2022/04/07(목) 21:21:24.28
String은 [Char]의 별칭인데 ID:v9cHeTKb
0096 익명 2022/04/08(금) 04:13:38.57
Haskell-jp 슬랙은 어때? ID:ZfK1p/yR
0097 익명 2022/04/08(금) 13:18:29.82
일단 들어가 보면? ID:7u/c8YSR
0098 익명 2022/05/25(수) 23:07:08.21
91 순수 함수형이라고 하면서 실제로는 그렇지 않고 결국 모나드도 써야 실용적인 걸 만들 수 있고 예제에 자주 나오는 것처럼 간단하게 쓰면 느리고 Lisp에도 똑같이 있었던 문제로 예쁘게 쓰는 것보다 빠르게 쓰는 게 중시되고 그러는 사이에 사람들이 점점 떠났어 이념이 현실에 졌다고 생각해... ID:HGLTMsh1(1/2)
0099 익명 2022/05/25(수) 23:31:09.11
맞다 무엇보다 디버깅이 너무 어렵고 디버깅 때문에 타입 제약 같은 거 뭔 짓이지... 싶을 때가 자주 있어
작업 환경이 안 좋은 게 전혀 개선이 안 돼서 싫어지네 ID:HGLTMsh1(2/2)
0100 익명 2022/05/27(금) 23:36:10.66
타입은 컴파일할 때만 존재하고 모나드 클래스도 컴파일할 때만 사용하고 실행할 때 사용되는 건 모나드 인스턴스뿐이고 그 인스턴스는 임의의 언어로 재발명할 수 있고 어떤 언어로 디버깅해도 어려움은 같아
결국 재발명을 해야 실용적인 지식을 얻을 수 있어 ID:IybSybG6
0101 익명 2022/05/27(금) 23:58:56.33
아직도 printf 디버깅에 의존하고 있는 건 Haskell 정도일 거야... ID:IeVDSTdQ
0102 익명 2022/05/28(토) 00:21:10.26
C 라이브러리에 떠넘기는 효율화를 생각하면 디버깅 효율화에는 집착하지 않는 편이 떠넘기기 쉽지 ID:1xwNIN3l
0103 익명 2022/07/18(월) 03:26:49.61
왜 이렇게까지 인기가 없어졌을까 ID:zDzunRmU
0104 익명 2022/07/18(월) 14:14:58.82
목소리 큰 사람들이 안 쓰게 됐을 뿐이야 ID:IRYfc5Qz
0105 익명 2022/07/19(화) 17:39:52.93
개인이 언어를 직접 만들 수 있는 수준이 된 설 단체는 필수가 아님 ID:6V/PH7AR
0106 익명 2022/08/07(일) 20:06:46.56
막혔습니다 다음 코드가 안 되는 이유를 모르겠어
import Data.Ratio
[[ a,b],[c,d]] *** [[ p,q],[r,s]] = [ [ ap+br, aq+bs], [cp+dr],[cq+ds]]
i [[ a,b],[c,d]] = [[d,-b],[-c,a]]
a :: [[Rational ]] b:: [[Rational ]]
a = [[1%1,99],[0,100]] b = [[100,0],[-99,1]]
main = do mapM_ print $ [ a, b , i a , i b] print $ (( i b ) *** ( i a ) ) *** b
실행 시간 오류로 prog: prog.hs:4:1-79: Non-exhaustive patterns in function
이 돼 첫 번째 print의 출력
[[1 % 1,99 % 1],[0 % 1,100 % 1]] [[100 % 1,0 % 1],[(-99) % 1,1 % 1]] [[100 % 1,(-99) % 1],[0 % 1,1 % 1]] [[1 % 1,0 % 1],[99 % 1,100 % 1]]
을 봐도 어떻게 봐도 패턴 매칭이 되는데? 왜? 1 ID:My+goEll
0107 익명 2022/08/08(월) 19:26:19.73
106 리스트 길이가 안 맞아 길이가 2가 아닌 리스트를 어디서 만들었는지는 소스를 읽어보면 알 수 있어 ***는 길이가 3인 리스트를 반환해 1 ID:NwZYLTPj
0108 익명 2022/08/09(화) 10:46:53.89
107 아, 정말이다 복사 붙여넣기 실수인가 고마워 ID:VUIfOlq+
0109 익명 2022/08/11(목) 18:04:41.32
너희들 이 엄청 더운 여름을 어떻게든 할 시원한 코드를 Haskell로 간결하게 쓸 수 있어? ID:9dSVJvSP
0110 익명 2022/08/25(목) 11:20:55.19
https://hackage.hask...iter.Class.html#tell
listen ~(w, a) = (w, (a, w)) 이 ~는 무슨 문법이야? ID:97f0Pf6Z
0111 익명 2022/08/25(목) 21:14:39.81
https://www.sampou.o...ml#tut-lazy-patterns ID:+PRPT5FW
0112 익명 2022/08/25(목) 21:15:08.79
stack으로 wxHaskell 설치하려고 했는데,
stack install wxHaskell 라고 하면 Unknown package: wxhaskell 이라고 나오면서 설치가 안 돼. Stack으로는 wxHaskell 설치 못 하는 거야? 그럴 리가 없다고 생각하는데. 공식 문서 봐도 stack일 때 방법이 안 써있어. ID:3SQ1xNiu
0113 익명 2022/08/29(월) 23:25:47.74
stackage에 안 들어 있어서 그런 거 아닐까?
최근 업데이트 안 됐고 병렬 처리도 문제 있을 것 같고...
stack이랑 GUI로 검색해보니까 이런 글이 있었어 https://www.stackbui...log/gui-application/ ID:mJ1Da6QY
0114 익명 2022/08/30(화) 19:30:33.33
다들 중앙 집중식 클라우드에 속고 있어 ID:XzDfLd3k
0115 익명 2022/09/10(토) 21:18:15.99
병목 현상은 사실상 버그랑 다름없으니까 결국 성능을 생각하면 Haskell은 버그가 섞이기 쉬운 언어라고 할 수 있어 게다가 입출력은 정상이니까 해결하기 엄청 까다롭고 실용성은 없어 ID:Jyomj+F3
0116 익명 2022/09/10(토) 23:20:56.83
로망 사고 언어 ID:6vG8VA3K
0117 익명 2022/09/11(일) 00:14:39.94
뭐 맞네 ID:HO9VQuZG
0118 익명 2022/09/20(화) 01:04:13.74
ghci --show-options | wc -l 출력: 1200 ID:zJWv8hkC
0119 익명 2022/09/24(토) 01:20:51.22
글 쓰던 전문가들이 글쓰기를 그만둬서 시들해진 느낌이 드는 거겠지. ID:v6+/ywPo(1/3)
0120 익명 2022/09/24(토) 02:26:09.94
아니, 근데 실제로 시들해진 거 아닐까? 역시 Haskell로 "성능"이랑 "가독성"을 양립시키는 건 꽤 어려워 역시 언어의 태생이라 할까, 성격이라 할까, 성능 면, 특히 속도 면의 성능 면은 어쩔 수 없이 우선 순위가 낮아, 하지만 실무에서는 물론 그게 가장 중요한 요소니까 그게 안 되면 시들해지는 것도 어쩔 수 없다고 생각해 ID:vtJ0GRzX
0121 익명 2022/09/24(토) 03:13:03.66
시스템은 모르겠지만 계획적인 거겠지. 다시 말해서, 떠드는 놈들이 짜증 나니까 떠들지 않게 될 때까지 시들해지는 거야. ID:v6+/ywPo(2/3)
0122 익명 2022/09/24(토) 03:21:31.25
애초에 원래 세계적인 주류 언어로 뛰어오르겠다는 생각 자체가 Haskell 커뮤니티에는 없는 걸지도 몰라 Haskell 커뮤니티는 학자들의 집합체잖아? 실무에는 원래 관심 없지 않을까? ID:cIbikbIQ
0123 익명 2022/09/24(토) 17:34:21.27
Stack으로 GUI 프로그래밍 하고 싶은데, stack으로 설치할 수 있는 라이브러리 중에 추천하는 게 있나요. ID:v6+/ywPo(3/3)
0124 익명 2022/09/27(화) 18:16:48.82
Haskell로 만든 체스 게임 있나요 말이랑 판은 예쁜 그래픽으로 마우스로 말을 움직이는 체스 ID:2m9lsdvh
0125 익명 2022/09/27(화) 19:10:55.70
내년의 Rust가 이 상태야. ID:rbvXlCo3
0126 익명 2022/09/27(화) 19:55:55.43
Haskell에 달려드는 사람들은 Rust에는 안 달려들겠지 Rust에는 재미가 없어 ID:CVmtKHy4
0127 익명 2022/09/27(화) 20:30:27.34
어쨌든 Haskell은 속도 성능을 내기 위한 방법의 표준화에 대해서 좀 더 다듬어줬으면 좋겠어 Haskell 2010 문서의 메모화 부분이 너무 허술해 실제 GHC 같은 데서 제공되는 거랑 차이가 너무 커서 뭔지 모르겠어 GHC의 연구 성과를 좀 더 표준 사양에 도입해줬으면 좋겠어 뭘 어떻게 하면 확실하게 이건 메모화되는지 명확하게 문서화해줬으면 좋겠어 ID:Ctbd02WQ
0128 익명 2022/09/28(수) 02:23:18.14
정리할 생각이 없으니까 점점 혼란스러워지지 ID:4krAnsc6
0129 익명 2022/09/29(목) 03:37:20.42
아직도 GHC라고 하면 Guarded Horn Clauses 쪽의 GHC를 먼저 떠올려 ID:IPtlf3/T
0130 익명 2022/10/01(토) 19:53:52.72
가장 실용적인 함수형 언어나 그 영향이 강한 언어는 뭐가 돼? ID:7gwAD0df
0131 익명 2022/10/01(토) 20:00:27.14
C 아닐까 ID:IQLzQmPp
0132 익명 2022/10/01(토) 22:58:35.36
표준 규격을 가장 충실하게 구현한 녀석이 우승 같은 생각은 전혀 수학적이지 않아 ID:76wmMtDf
0133 익명 2022/10/03(월) 18:02:59.08
Lisp 계열이나 OCaml 같은 거. ID:LGdcguEE
0134 익명 2022/10/04(화) 08:48:04.42
규칙이 없는 상태에서 규칙이 지켜지는 상태로 유도할지 아무것도 안 하고 있는데도 지속되는 규칙을 주워 모을지의 차이 ID:S20URLlI
0135 익명 2022/10/07(금) 20:15:05.17
F# 아닐까. ID:xpYSJYo6
0136 익명 2022/10/07(금) 20:28:34.11
Erlang ID:lAeL408c
0137 익명 2022/10/14(금) 22:28:23.68
람다나 <- 나 case로 바인딩되는 변수의 값은 두 번 이상 계산되지 않아 seq는 계산 타이밍을 바꾸는 효과밖에 없어
어려운 건 = 로 정의되는 이름인데 = 의 우변에서 아무리 seq를 써도 보람이 없어 ID:GVf4qcGD
0138 익명 2022/10/14(금) 23:54:06.57
하지만 Haskell 2010 보고서에는 평가 순서를 바꾸는 방법은 seq밖에 규정되어 있지 않아 GHC 같은 실제 처리계에서 그 외의 타이밍에 메모화되는 건 어디까지나 처리계의 독자적인 사양일 뿐이야 어떤 처리계에서 메모화되어서 빨랐던 프로그램이 다른 처리계에서 같은 속도로 처리될 거라는 보장은 어디에도 없어 2 ID:91YiMGAd
0139 익명 2022/10/15(토) 08:05:01.19
138 혹시, 개인적인 감상 같은 걸 나쁘다고 생각하는 건가 그리고 객관적인 사실(즉 절대적으로 옳은 사실)이라는 게 정의라고
개인적인 감상을 배제해야 한다는 사상은 어디에도 규정되어 있지 않잖아 ID:/BlEbfcm(1/3)
0140 익명 2022/10/15(토) 09:49:59.76
메모화에 관해서는 나도 >>138이랑 비슷한 생각을 갖고 있어 ID:fUoifk8c(1/2)
0141 익명 2022/10/15(토) 10:11:19.74
어떤 사람의 감상이 다른 사람의 감상과 같을 거라는 보장은 어디에도 없어 보장이 없어도 특별히 문제없다고 판명됐다면 그걸로 됐지 ID:/BlEbfcm(2/3)
0142 익명 2022/10/15(토) 10:19:45.48
가장 싫은 건 인터넷에 굴러다니는 엄청 깔끔한 프로그램이 있어서 "오, 대단해"라고 생각했는데 결국 그건 GHC의 메모화 덕분일 뿐이고 Haskell 본연의 것은 아니라서 다른 처리계에서는 안 통하는 거였던 경우야 사실상 GHC가 표준이니까 GHC에서 빠르면 "빠른 프로그램을 못 쓰는 건 아니다"이긴 한데, 그럼 GHC는 어떨 때 알아서 메모화해주는 건지, 어떨 때 그걸 이용해서 빠르지만 짧고, 이해하기 쉬운 프로그램을 쓸 수 있는 건지는 Haskell 2010 보고서가 아니라 GHC 쪽의 사양서를 읽거나, 실험해보거나 밖에 없어, 하지만 전자는 애초에 GHC 사양서 자체가 어디 있는지 모르겠는데 찾아도 아마 메모화 이론은 엄청 어려운 논문 수준의 얘기일 거고, 그렇다고 실험으로 꼼꼼하게 파악하는 건 디버깅과 같은 수준으로 꽤 고통스러운 작업이고, 게다가 완성된 건 대부분 속도를 위해서 가독성을 꽤 희생해야 하는 게 될 거고, 당연히 이식성도 떨어지고 GHC가 해주는 거 전부가 아니더라도 인터넷에 자주 굴러다니는 피보나치 수열이라든가 소수 생성 같은 GHC의 선의에 휘말리는 기능을 이용한 깔끔하지만 빠른 프로그램 정도는 표준화해서 모든 처리계에서 돌아가게 해줬으면 좋겠네 1 ID:+yYiQ+MP
0143 익명 2022/10/15(토) 11:46:05.26
뭐 실제로 메모화를 생각하기 시작하면 Lisp처럼 가독성을 희생한 속도 중시 코드만 나오니까... 메모화는 생각하지 않는 게 맞지만 그렇게 하면 실용성은 전무하고 즉 ID:fUoifk8c(2/2)
0144 익명 2022/10/15(토) 15:59:55.52
Lisp이랑 Haskell의 차이점 중 중요한 건 모듈 정의를 인터랙티브하게 하지 않는 거 ghci 실행할 때 모든 모듈이 정의되고 마지막에 main이나 다른 식을 평가・실행하는 부분만 인터랙티브
애초에 module Main where 같은 건 식이 아니야 식이 아니니까 평가 순서라는 개념이 거기서는 안 통하지 ID:/BlEbfcm(3/3)
0145 익명 2022/11/03(목) 00:12:52.63
GHC가 사실상 표준이고 굳이 따지지 않는다면 다른 컴파일러를 쓸 일도 없겠지 그래도 함수형 언어는 속도를 중시하는 작업에는 안 맞잖아 속도를 추구하는 게 잘못이야 ID:A4mGU1Ql(1/2)
0146 익명 2022/11/03(목) 01:14:31.73
Symbolics가 실패한 사례를 떠올리게 하네 그것도 이상을 추구했는데 뭘 해도 엄청 느리고 다른 회사들은 그보다 빠르고 싼 기기를 계속 내놓았지 당연히 참패는 필연적이었어 ID:+2fbLBnA
0147 익명 2022/11/03(목) 06:02:33.84
정적 타이핑으로 인한 견고성이라면 Rust가 있고... ID:A4mGU1Ql(2/2)
0148 익명 2022/11/03(목) 11:53:42.15
결국 Haskell 언어를 제정하는 커뮤니티는 학자들의 커뮤니티라서 실용적인 성능을 향상시키는 데 애초에 관심이 없으니까 실무적인 유용성을 기대하는 건 무리야 ID:k32TY8HF
0149 익명 2022/11/04(금) 01:33:00.25
뭐 그렇겠지 ID:ggdePY4U
0150 익명 2022/11/05(토) 10:09:23.49
142의 지적은 다른 언어의 GC에도 그대로 들어맞는다고 생각해. ID:nyx0vuE5
0151 익명 2022/11/06(일) 14:53:18.67
Haskell로 개발하는 회사는 어디가 있나요? 검색해보면 HERP나 TuruCapital밖에 안 나와... 1 ID:p6fV7yyc(1/2)
0152 익명 2022/11/06(일) 16:00:47.05
GHC 9.4.3 릴리스 ID:8Hp8Ymz2
0153 익명 2022/11/06(일) 16:35:55.22
Haskell 위키에 나와 있는 거 보면, 부분적으로 Haskell을 쓰는 느낌이네 ID:MgGeIf3l
0154 익명 2022/11/06(일) 18:08:25.72
151 한때 후지쯔가 채용 공고 낸 적이 있었던 것 같은데 이제 없으니까 그만뒀겠지 ID:SOHxH3HV
0155 익명 2022/11/06(일) 19:47:21.37
그리고 아사히넷 채용 공고에 Haskell이 있었어 아사히넷에 지원해볼까. HERP는 레퍼런스 체크가 귀찮아... (상사랑 얘기하고 싶지 않아) ID:p6fV7yyc(2/2)
0156 익명 2022/11/07(월) 00:00:47.60
페이스북도 썼던 것 같아. ID:35GjxAYG
0157 익명 2022/11/07(월) 00:41:59.56
Haskell 채용 공고가 잘 안 보이는데, 언어로서 애매한 건가요...? Haskell로 할 수 있는 건 Python, Java, Go, Scala로도 할 수 있다, 같은... 굳이 Haskell을 쓸 이유가 없다, 같은... 1 ID:aVSF4vDw
0158 익명 2022/11/07(월) 11:14:09.19
오버헤드 신경 쓰지 않고 견고성을 확보하고 싶을 때 음, 구체적인 예시가 안 떠오르네 ID:uMWKgAVp
0159 익명 2022/11/07(월) 12:17:58.82
157
Haskell 채용 공고가 잘 안 보이는데, 언어로서 애매한 건가요...? Haskell로 할 수 있는 건 Python, Java, Go, Scala로도 할 수 있다, 같은... 굳이 Haskell을 쓸 이유가 없다, 같은... 긁적긁적 ID:y2qdzeiV(1/2)
0160 익명 2022/11/07(월) 12:18:26.38
오타 죄송 ID:y2qdzeiV(2/2)
0161 익명 2022/11/08(화) 09:36:33.50
소비자 입장에서는 GHC는 무료 소프트웨어니까 비용이 높다고 할 수 없어
비용이라는 잣대가 만능이 아니라는 구체적인 예시가 지금 나왔네 ID:VjMrXhSs
0162 익명 2022/11/09(수) 01:51:03.18
뭐 학자들의 장난감이니까... ID:3Bh922De
0163 익명 2022/11/09(수) 10:38:48.12
어떤 결과가 나올지 계약이나 서약을 하지 않는 게 오픈소스 장난감밖에 안 된다는 보장도 안 해 ID:wL144bz5
0164 익명 2022/12/02(금) 14:29:56.51
Haskell 아직 살아있어? ID:fOU9+Fqp
0165 익명 2022/12/03(토) 12:50:06.92
무생물이라는 건 보장해 아무것도 실험 안 했는데도 보장하는 걸 수학적이라고 할 수 없는 건 아니지 ID:HJhX36nM
0166 익명 2022/12/12(월) 16:34:32.76
Unreal Verse https://simon.peyton...kell-exchange-22.pdf Simon 씨가 관여하고 있으니까 Haskell의 아우인가? 언리얼 엔진에 채택되면 함수형 프로그래밍에서는 가장 많이 쓰이게 되는 걸까 1 ID:Yq3RU8vo
0167 익명 2022/12/13(화) 21:33:17.94
살짝 해볼까 했는데 지금은 HIE가 아니라 HLS 쓰라는 게 슬슬 나오는데 그럼 HLS를 Emacs에서 어떻게 쓰면 되는지 정보가 없어
어떻게 된 거야 haskell-mode는 2016년에 멈췄고 ID:s5AI7uvQ
0168 익명 2022/12/15(목) 08:50:05.16
166 10년 만의 비전 실현으로 가슴이 뜨거워지네 https://pc.watch.imp...n/kaigai/555239.html 프레젠테이션을 보면, Sweeney 씨는 게임 코드를 실행하는 플랫폼이 초 병렬화되어 가는 것을 예견하고, 언리얼의 경우 80%의 CPU 사용량을 병렬화할 수 있다고 말하고 있다. 또한, (소프트웨어) 트랜잭셔널 메모리와, 프로그래밍에는 함수형 언어(예시로 Haskell을 들었지만, 동시에 Haskell에 좋지 않은 점도 있다고 설명하고 있다)가 맞는다는 등을 말하고 있다.
그나저나 SPJ를 빼오다니 게임 업계는 대단해 ID:hYy+q+Gy
0169 익명 2022/12/15(목) 11:15:36.01
아니 15년 만이야 https://game.watch.i...cs/20080911/epic.htm
Sweeney 씨는 순수 함수형 언어가 가진 병렬 처리 안전성에 주목하고 있으며, 장래적으로 게임 프로그래밍은 그런 처리계로 옮겨가야 한다고 했다. Sweeney 씨는 그 모델로 언어 "Haskell"을 들고 있지만, 게임 개발의 주류가 될 수 있는 언어는 아직 등장하지 않았고, 장래에 기대하고 있다고 한다. ID:3Q63kYiw
0170 익명 2022/12/17(토) 23:16:08.75
Haskell로 웹 시스템 백엔드를 개발했을 때 메모리 사용량은 Go나 Python과 비교해서 어느 정도인가요? 많나요? 적나요? 1 ID:7V76W+iX
0171 익명 2022/12/23(금) 15:37:27.80
서버와 클라이언트 샘플 프로그램을 연습 삼아 써봤는데 toSend <- T.getLine sendAll sock (E.encodeUtf8 toSend) 일본어 문자열을 출력하려면 ByteString을 거쳐야 돼 혹시 임의의 타입으로 주고받고 싶을 때 직접 ByteString으로 압축 & 압축 해제해야 돼? 아마, C 언어 FFI가 기반이라서 이렇게 된 거겠지? 1 ID:Rf1vHPUu
0172 익명 2022/12/23(금) 20:44:32.65
171 명시적으로 변환해야 하는 건 사실이지만 그 원인은 C 언어가 아니야 언어와 관계없기 때문에 Haskell 2010에서도 C 언어에서도 같은 데이터 구조를 쓸 수 있어
170 데이터만 보면 메모리 사용량을 같게 하는 건 가능해 ID:Gou4DLut
0173 익명 2022/12/29(목) 17:00:27.04
모노이드, 펑터는 익혔는데 자연 변환에서 막혔어 ID:ZBF5EoRT
0174 익명 2022/12/29(목) 23:24:37.93
지금 Haskell로 GUI를 만든다면 뭐가 좋아? 가능하면 저수준 라이브러리는 쓰고 싶지 않은데 wx는 이제 관리 안 되고 fugets? threepenny? webviewhs? 다 Arch 패키지에 없어 실용 언어로 Haskell을 쓰고 싶은데 쓸 수 없는 것ばかり라서 슬퍼 ID:pM4wQIt0
0175 익명 2022/12/30(금) 12:18:58.51
그런데 wxHaskell이 유행하지 않는 건 왜일까? wx가 유행하지 않아서일까? ID:/hxsvxNk
0176 익명 2022/12/30(금) 13:53:40.82
정말 필요한 건 드릴을 대량 생산하는 게 아니라 드릴도 아니고 구멍이니까 아닐까 ID:FXsz7+hW
0177 익명 2022/12/30(금) 19:21:21.60
Haskell은 이미 버려진 느낌이야 1 ID:dTZ5gB6H
0178 익명 2023/01/02(월) 01:15:52.75
177 그래? 그건 실무적인 의미에서? ID:jETc9FsM
0179 익명 2023/01/02(월) 03:01:15.30
스테마가 너무 심했어. ID:/m9PT5PE(1/2)
0180 익명 2023/01/02(월) 03:01:59.29
다시 말할게. 모 출판사의 스테마가 너무 심했어. ID:/m9PT5PE(2/2)
0181 익명 2023/01/03(화) 00:10:20.46
버려지게 된 건, 모나드가 뭐야?라는 미스터리하고 흥미로운 질문이 어느새 김빠지는 얘기가 됐기 때문이 아닐까. 이제 아무래도 좋다고 할까. ID:7mh2KVDC
0182 익명 2023/01/03(화) 04:29:29.65
기술평론사 때문 아닐까? ID:yYGSV1g6
0183 익명 2023/01/04(수) 05:08:58.65
관리자가 하나둘씩 도망치는 게 상징적이야... 이해하기 쉬운 코드를 쓰면 성능이 엄청 안 좋고 그렇다고 열심히 짜면 이게 대체 뭘 하고 싶은 건지 싶어지고
지연 평가가 기본인 것도 굉장히 안 좋고 엄격 평가랑 구분해서 결국은 써야 하고 아직 발전 중이라는 느낌이 들어 차라리 엄격 평가는 없애는 게 더 시원시원할 듯 ID:peYJ5uzH
0184 익명 2023/01/04(수) 18:10:50.86
PureScript로 옮겨가자 엄격 평가라 쓰기 쉽고 ID:HUTbVNXS
0185 익명 2023/01/05(목) 03:59:19.12
하지만 무한 수열 같은 걸 표현할 수 없게 되는 게... ID:PBBtO4Nd(1/2)
0186 익명 2023/01/05(목) 12:24:48.41
그런 건 현실에서는 다룰 수 없으니까 적당한 숫자를 상한으로 정해두면 돼 ID:dQdtWkz5(1/2)
0187 익명 2023/01/05(목) 13:19:36.00
아니, "표현할 수 있다"는 데 의미가 있는 거야 ID:PBBtO4Nd(2/2)
0188 익명 2023/01/05(목) 14:40:58.83
그런데 단점이 너무 커 역시 필요 없어 ID:dQdtWkz5(2/2)
0189 익명 2023/01/14(토) 23:43:44.49
PureScript랑 겹치나? GHC 9.6.1-alpha1 is now available - Announcements - Haskell Community ID:vLwyb8f9
0190 익명 2023/01/17(화) 00:55:50.42
무한 길이의 [a]를 가정해서 폐지하고 다른 언어와 같은 방식으로 바꾸면 IO a 같은 타입이 돼
생물학 같은 거 좋아할 것 같은 사람들은 [a]랑 IO a의 차이가 치명적(즉 하나는 죽지만 다른 하나는 살아남는다) 이라고 단정 짓는 경향이 있어 ID:zIKNxshB(1/2)
0191 익명 2023/01/17(화) 01:31:37.81
생물학이랑 관계없어 ID:PP1OxyD+
0192 익명 2023/01/17(화) 03:13:49.00
언어는 죽지 않거나 부활시키면 된다고 생각하면 이제 생물학이랑 관계없어 그렇게 생각하지 않는다면 관계 있을 것 같고 ID:zIKNxshB(2/2)
0193 익명 2023/01/17(화) 08:07:29.90
무의미한 비유 표현 ID:Inpyi8aQ
0194 익명 2023/01/19(목) 01:20:46.84
클라우드는 안에 사람이 있는지 무인인지 알 수 없으니까 인간과 기계를 혼동한 게 아니라 불확실하게 한 거야 ID:cE+DUb2P
0195 익명 2023/01/19(목) 07:47:39.45
무슨 말인지 모르겠어 글 쓰는 연습 좀 해 ID:7wHhBGeN
0196 익명 2023/01/19(목) 17:42:25.26
거짓말 쓰지 마라고 듣지 않으려고 노력은 하고 있어 실제로, 거짓말이라고 듣지 않아 ID:ugYwIpAQ(1/2)
0197 익명 2023/01/19(목) 20:45:58.03
틀리지도 않은 문장 참 거짓 이전에 내용이 없어 ID:LuniV29G(1/2)
0198 익명 2023/01/19(목) 20:49:17.03
그럴듯하지만 조금만 읽어보면 별 내용도 없다는 걸 알 수 있어 ID:LuniV29G(2/2)
0199 익명 2023/01/19(목) 21:18:32.97
"알 수 있다"랑 "무슨 말인지 모르겠다"는 모순되는 것 같아 둘 중 하나가 거짓말하는 거 아냐 1 ID:ugYwIpAQ(2/2)
0200 익명 2023/01/19(목) 21:33:25.41
199 너 독해력도 없니 이제 이 스레드 오지 마 ID:QROh3L3M
0201 익명 2023/01/19(목) 21:38:24.06
너도 반응하지 마 ID:CHvJHSS4
0202 익명 2023/01/20(금) 01:52:23.49
아무리 할 얘기가 없다고 해도 ID:jpIFaaML
0203 익명 2023/01/21(토) 13:30:02.33
직업윤리가 어려워요 ID:ms4pFp6J
0204 익명 2023/01/21(토) 16:31:20.60
스레드 주제에서 벗어났어 ID:c9rqNig0
0205 익명 2023/01/29(일) 20:58:33.14
교과서대로 했는데 왜 오류가 나는 거지? 코드: fork :: (a->b, a->c) -> a -> (b, c) fork (f, g) h = fork (f h, g h) main :: IO () main = do print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")
출력: 오류 발생 ERROR 2번째 줄 - 명시적으로 타입이 지정된 바인딩에서 타입 오류 *** 항: fork *** 타입: (a -> b -> c,a -> b -> d) -> a -> b -> (c,d) *** 일치하지 않음: (a -> b -> c,a -> b -> d) -> a -> (b -> c,b -> d) 1 ID:3238s/rq
0206 익명 2023/01/30(월) 02:11:06.80
205 fork (f, g) h = (f h, g h) 아닐까? 1 ID:jVdK8GQm
0207 익명 2023/01/30(월) 04:31:24.57
206 감사합니다. 맞았습니다. 코드: pair :: (a->b, a->c) -> a -> (b, c) pair (f, g) x = (f x, g x) fork :: (a->b, a->c) -> a -> (b, c) fork (f, g) h = pair (f, g) h main :: IO () main = do print $ fork (map fst, map snd) (zip [0 .. 4] "hallo") 출력: -- ([0,1,2,3,4],"hallo") 이걸로 잘 되니까 보고하려고 했는데, 같은 걸 2시간도 넘게 전에... ㅠㅠ ID:KsiNNj/4
0208 익명 2023/02/01(수) 14:35:45.13
Haskell 쓰는(그리고 Linux 쓰는) 여러분은 xmonad 쓰나요? 윈도우 포커스를 바꿀 때 floating 윈도우는 무시하게 하고 싶어요. 원래 focusUp' 함수는 focusUp' :: Stack a -> a focusUp' (Stack t (l:ls) rs) = Stack l ls (t:rs) focusUp' (Stack t [] rs) = Stack x xs [] where (x :| xs) = NE.reverse (t :| rs) 처럼 엄청 간결하게 되어 있는데, 여기에 최소한의 변경을 더해서 목적을 달성하려면 어떻게 해야 할까요? 1 ID:RAEJFXsc
0209 익명 2023/02/17(금) 00:17:58.82
ChatGPT한테 여러 샘플 코드를 쓰게 해서 공부하고 있어 ID:x2uQcODA
0210 익명 2023/02/18(토) 07:53:47.68
208인데 스레드 주제에서 벗어났나요 Linux 게시판의 타일형 WM 스레드로 옮기겠습니다(전혀 움직이지 않는 스레드라서 안 될 가능성이 높지만...) ID:pwjCq/Fb
0211 익명 2023/02/23(목) 22:53:40.11
죄송합니다 엄청난 H를 즐겁게 배우는 책을 복습하고 있는데 궁금해서 시험해봤는데
구체적인 타입이 정해지지 않은 값(단독 변수)은 아래(Maybe나 배열) 외에 어떤 게 있나요?
v1 :: Maybe a v1 = Nothing
v2 :: [a] v2 = []
타입 제약을 쓰지 않는 타입 변수를 써서 어떤 단독 변수의 타입을 정의할 수 없을까 생각했습니다.
그리고 함수에서도 구체적인 타입이 정해지지 않은 값을 반환하는 함수가 있나요? (Nothing이나 빈 리스트 외에) 1 ID:3VcdShfb
0212 익명 2023/02/24(금) 02:14:24.44
211 Bing 챗봇한테 물어보니까 이런 답변이 돌아왔어. 참고가 될까.
타입 변수를 포함하는 데이터 타입의 예시로는, 함수 타입, 대수적 데이터 타입, 타입 클래스 등이 있습니다. 예: data Tree a = Leaf a | Node (Tree a) (Tree a) 이 대수적 데이터 타입 Tree는 임의의 타입 a를 요소로 하는 이진 트리를 나타냅니다. 예: class Eq a where (==) :: a -> a -> Bool (/=) :: a -> a -> Bool 이 타입 클래스 Eq는 임의의 타입 a에 대해서 동등성을 정의하기 위한 시스템입니다. 1 ID:PIH/rCf2
0213 익명 2023/02/25(토) 11:21:45.77
212 감사합니다.
엄청난 H를 즐겁게 배우는 책에도 Tree 타입이 있어서 시험해봤습니다.
구체적인 내용이 "없는" 것을 나타내는 값의 경우 타입 인자로 정의할 수 있는 것 같습니다.
data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show)
v3 :: Tree a v3 = EmptyTree ID:h/PI1ikt
0214 익명 2023/04/29(토) 14:07:24.45
멀티 포스트지만 알려줘 【추가 있음】ChatGPT가 아니라 사람이 모나드를 발명하게 된 경위를 대충 조사했다(출처 포함). https://qiita.com/iH...e7a59eef034ab6d0fdc2 이 글 맞아? 이런 얘기 들어본 적도 없고. 범주론으로 모듈성 같은 걸 다룰 수 있어? 2 ID:AoTbqg9O
0215 익명 2023/05/01(월) 00:30:45.06
214 잘 모르겠지만 "모나드가 발명된 경위"는 아니네 1971년 책에 이미 모나드에 대해서 쓰여 있는 것 같고 en.wikipedia.org/wiki/Categories_for_the_Working_Mathematician ID:PDTetkfq
0216 익명 2023/05/03(수) 20:58:10.10
214 영어로 찾아봐도 그런 얘기 나온 적은 없네. ID:ioA1phJ7(1/2)
0217 익명 2023/05/03(수) 21:14:18.69
여기에도 그런 스토리는 안 써있어 https://pdfs.semanti...73384895524bbebd.pdf ID:ioA1phJ7(2/2)
0218 익명 2023/06/09(금) 14:58:05.85
Lisp이나 카리-하워드 동형 같은 것의 관련성은 수학적인 의미에서는 훨씬 전이고 구현적인 얘기일까 https://en.m.wikiped..._related_mathematics ID:GYy2ex4t
0219 익명 2023/06/20(화) 00:30:03.89
do 표기법에서 메모화에 대해서 질문입니다 예를 들어
do let x <- someComplexExpression print $ f x print $ g x
같은 코드가 있을 때 x의 값은 f x를 평가할 때랑 g x를 평가할 때 2번 따로따로 계산되나요? 적어도 Haskell 2010 Lang. Rep.(이하 HLR2010)에서는 이런 경우 메모화되어서 2번 전개되지 않는다는 기술을 찾을 수 없었습니다 그래서 공식적으로는 이런 식으로 쓰면 2번 전개된다고 생각해야 하는 것 같습니다 그럼 someComplexExpression을 먼저 전개하고 나서, 전개한 것을 x에 바인딩하려면 어떻게 해야 할까요? HLR2010에서는 seq를 쓰면 된다고 하는데 이 경우 x <- seq someComplexExpression someComplexExpression 같은 식으로 잘 될까요? 그리고 그걸로 잘 되고 있는지 확인하는 방법이 있을까요? 즉 실제로 someComplexExpression이 몇 번 전개되는지 확인하는 방법이 있을까요? 잘 부탁드립니다 ID:qm9+2t5E
0220 익명 2023/06/25(일) 14:24:09.04
질문드립니다 다른 표수의 유한체에서 계산하는 코드를 생각하고 있습니다
어떤 변수에 𝔽₃이나 𝔽₅의 값을 섞어서 대입하는 일은 없으니까 𝔽₃의 원소를 생성하는 생성자 F3이나 𝔽₅의 원소를 생성하는 생성자 F5를 정의해서
x = F3 $ 1+2 y = F5 $ 2-5
같은 식으로 쓸 수 있으면 좋겠다고 생각하고 있습니다 그러려면
data FiniteFieldCh3 = F3 Int instance Num F3 where...
처럼 F3, F5 둘 다에 Num을 정의해야 합니다 귀찮으니까 FiniteField라는 클래스를 만들어서 아래처럼 할 수 없을까 해봤는데
class FiniteField t where modulus :: t -> Int toInt :: t -> Int fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where x + y = fromInt $ mod ( toInt x ) + ( toInt y ) ) ( char x ) ID:H+Ij4nqZ(1/3)
0221 익명 2023/06/25(일) 14:24:14.71
아래 같은 오류가 나옵니다
prog.hs:22:10: error: • The constraint ‘FiniteField a’ is no smaller than the instance head (Use UndecidableInstances to permit this) • In the instance declaration for ‘(Num a)’ | 22 | instance ( FiniteField a ) => ( Num a ) where | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
이건 뭐죠? 참고로 FlexibleInstances가 필요하다고 해서 맨 앞에 {-# LANGUAGE FlexibleInstances #-} 를 넣었습니다 컴파일러는 ghc 8.4.4입니다 잘 부탁드립니다 ID:H+Ij4nqZ(2/3)
0222 익명 2023/06/25(일) 14:43:47.12
죄송합니다, 마지막 줄을 잘못해서 수정하기 전 걸 복사 붙여넣기 했습니다
class FiniteField t where modulus :: t -> Int toInt :: t -> Int fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where x + y = fromInt $ mod ( toInt x ) + ( toInt y ) ) ( modulus x )
입니다 잘 부탁드립니다 ID:H+Ij4nqZ(3/3)
0223 익명 2023/06/25(일) 15:08:12.64
타입 클래스의 단일성 제한이라든가, 함수 종속성이라든가, 라든가... 엉뚱한 소리라면 죄송합니다. ID:CDxt6lPg(1/2)
0224 익명 2023/06/25(일) 15:23:50.61
뭔가 Bard 같은 데 넣어도 정보 얻을 수 있을지도 ID:CDxt6lPg(2/2)
0225 익명 2023/06/25(일) 17:33:31.79
감사합니다 현재 아직 조사하고 있는 중인데
https://stackoverflo...an-the-instance-head
에 따르면 아무래도 클래스 제약 해결을 루프시키지 않기 위한 제약 같습니다 즉 "a가 클래스 C일 때 클래스 D에도 넣을 수 있다", "a가 클래스 D일 때 클래스 C에도 넣을 수 있다"는 선언
class ( C a ) => D a where ...
class ( D a ) => C a where ...
처럼 선언하면 안 되는 것 같습니다 그래서 => 왼쪽의 타입은 오른쪽의 타입보다 "짧은" 것이 요구된다고 합니다 예를 들어 toD 같은 타입 생성자를 만들어서
class ( C a ) => ( D ( toD a ) ) where ...
처럼 해야 한다는 것 같습니다 그리고 그 뒤에 newtype을 쓰면 어떻게 저떻게 한다고 써있는데 뭔 소린지 ID:OvK+yilq
0226 익명 2023/07/03(월) 23:45:49.20
값이랑 모듈 둘 다 포함된 데이터를 만들면 되지 않을까 1 ID:QPaqlNti
0227 익명 2023/07/04(화) 00:24:50.19
226 이런 거죠
data FiniteField = FF { val :: Int, modulus :: Int } deriving ( Show, Eq)
instance Num FiniteField where x + y = FF ( mod ( ( val x ) + ( val y ) ) ( modulus x ) )( modulus x ) x * y = FF ( mod ( ( val x ) * ( val y ) ) ( modulus x ) )( modulus x ) fromInteger x = FF x 1
하지만 이렇게 하면 예를 들어
x = FF 2 7 y = FF 4 7 x + y
같은 경우 실행할 때 프로그램이 값에 저장된 modulus를 읽어 와서 나눗셈을 한다는 번거로움이 있습니다 하지만 제가 하고 싶은 프로그램에서는 애초에 각 변수의 modulus가 정해져 있고 애초에 읽어 오는 게 바보 같다는 느낌이 듭니다 실행할 때 x도 y도 𝔽₇의 원소라고 정해져 있고 mod의 두 번째 인자는 컴파일할 때 7이라고 정해져 있는데 그 7을 읽어 오는 작업이 쓸데없어 보입니다 게다가 이건 타입이 아니라 값이니까 타입 검사의 혜택도 받을 수 없습니다 프로그램에 나오는 modulus마다 전부 F2 타입, F3 타입, F5 타입... 이렇게 전부 만들고 모든 Num 인스턴스를 하나씩 정의하고 하면 되겠지만, 뭔가 좋은 해결 방법이 없을까 하고 ID:+0TfLuMN
0228 익명 2023/07/04(화) 11:11:04.93
이 글에서는 잉여환을 만들고 있는 것 같은데, 참고가 안 될까
https://qiita.com/gu...9abca700eea7f46626e4 ID:rN492ZrW
0229 익명 2023/07/06(목) 01:04:07.84
여러분 정보 감사합니다 여러 가지 알려주신 출처랑 직접 찾아본 정보랑 해서 일단 마무리하기로 했습니다 이렇게 됐습니다 https://ideone.com/3Lhc4z ID:sds/6LG1
0230 익명 2023/08/05(토) 13:07:07.29
hage ID:1IOAcn45
0231 익명 2023/09/04(월) 14:41:20.09
Haskell은 쇠퇴하고 있네, 슬퍼 메모리 누수 대응은 너무 어렵고 라이브러리도 최신 ghc에서는 쓸 수 없거나 해서 뭔가 실용적인 언어가 아니라는 생각이 들어 xmonad 같은 건 거의 BangPattern이잖아 그러고 보니 자동으로 strict하게 하는 확장이 두 개 정도 있었는데 안 봤는데 어때 ID:FcZAE9nJ
0232 익명 2023/09/16(토) 21:21:50.35
수학의 집합은 보통 순서를 붙여서 쓰는 것 같은데(첨자로 접근할 수 있는 편이 편리) 왜 많은 언어에서는 집합에 순서가 없는 걸까요? ID:6682wM15(1/3)
0233 익명 2023/09/16(토) 21:25:49.38
동등성 판정 연산자에서는 순서를 따지지 않지만, 표기법으로는 순서에 따른 인덱스 접근도 가능한 게, 편리하다고 생각하는데
가장 기본적인 집합 중 하나인 자연수가 순서를 중시해서 다루는 것처럼 대부분의 집합은 순서를 정리해서 쓰지 않으면 실용적으로 불편하지 않을까요? ID:6682wM15(2/3)
0234 익명 2023/09/16(토) 23:06:28.20
순서가 없는 녀석이랑 순서가 있는 녀석은 왜 대등한 관계가 아니라 전자가 일반적이고 후자가 특수하다고 하는 걸까?
반대로, 복소수는 왜 허수부가 있는 녀석이 일반적이고 허수부가 없는 녀석이 특수한 걸까? ID:XG1/1lYn
0235 익명 2023/09/16(토) 23:13:33.62
수학적 개념으로 동등하거나 어느 쪽이 특수하다고 할 수 없다는 건 납득하고 있습니다
다만, 집합은 순서를 유지해서 기술하는 편이 확실히 인지적 부담이 적고, 수학적 표기법에서도 많은 경우 그렇게 되어 있다고 생각하는데, 많은 언어에서 내장형 집합이 그렇게 되어 있지 않은 건 어떤 사상에 따른 걸까요?라는 질문입니다 ID:6682wM15(3/3)
0236 익명 2023/09/17(일) 02:24:17.53
데이터 타입으로서의 기원으로는 소집합 데이터 구조에서 시작된 것 같아서 소인(disjoint) 것이 우선 요구되고 다른 데서 집합이라는 이름이 쓰이지 않아서 소이고 비순차적인 데이터 타입을 집합 타입이라고 부르게 된 것 같아 ID:yNwKlKA6
0237 익명 2023/09/17(일) 02:39:39.55
내장형과 사용자 정의형의 구분을 없애는 사상이 있어 가장 옳은 것을 실현하는 사상이 아니라 실수했을 때 죄가 가벼워지는 ID:XqeO/FaW
0238 익명 2023/09/17(일) 23:47:13.96
초보자는 ++를 쓰지만 익숙해지면 <>를 쓰는 사람이 많은 것 같아 Semigroup만 구현하면 쓸 수 있는 <>를 쓴 편이 범용적으로 쓸 수 있어서일까 ID:70jB6wMR
0239 익명 2023/09/18(월) 10:00:00.93
속설이 쇠퇴하는 건 "시대가 바뀌면 정의가 바뀌니까"가 아니야 속설이 정답이었던 시대는 없어 ID:E5yF50jH
0240 익명 2023/09/19(화) 19:53:05.75
유닉스의 touch를 구현하고 싶은데
{-# LANGUAGE OverloadedStrings #-} import System.Posix.Files.ByteString
main = do touchFile "hoge.txt"
touch.hs: hoge.txt: touchFile: does not exist (No such file or directory) 라는 오류가 나옵니다 없는 게 당연하고 touch로 만들려고 하는 건데 버그가 있는 걸까요? ID:QCYT99dv(1/3)
0241 익명 2023/09/19(화) 19:54:00.31
유닉스의 touch를 구현하고 싶은데
{-# LANGUAGE OverloadedStrings #-} import System.Posix.Files.ByteString
main = do touchFile "hoge.txt"
touch.hs: hoge.txt: touchFile: does not exist (No such file or directory) 라는 오류가 나옵니다 없는 게 당연하고 touch로 만들려고 하는 건데 버그가 있는 걸까요? ID:QCYT99dv(2/3)
0242 익명 2023/09/19(화) 19:58:16.28
죄송합니다, 글쓰기 버튼이 반응하지 않아서 연속으로 글을 쓰게 됐습니다 ID:QCYT99dv(3/3)
0243 익명 2023/09/19(화) 20:14:24.31
touch의 본래 의미를 생각하면, 뭐 안 돼도 그런 거라고 생각해 ID:a563RtWW(1/3)
0244 익명 2023/09/19(화) 20:14:45.64
touch의 본래 의미를 생각하면, 뭐 안 돼도 그런 거라고 생각해 ID:a563RtWW(2/3)
0245 익명 2023/09/19(화) 20:18:27.88
앗 나도 연속으로 글 쓰게 됐네 미안 뭔가 5ch 무거운 것 같네 ID:a563RtWW(3/3)
0246 익명 2023/09/20(수) 08:38:40.03
for i in * ; do touch anotherdir/$i ; done 1 ID:I55f6i4N(1/2)
0247 익명 2023/09/20(수) 08:53:25.46
246(bash)로 얼버무렸다
Perl이 내일 사라진다는 것 같아서 Haskell을 Perl 대신 쓰려고 생각해 정규 표현식이랑 glob, 파일 입출력은 됐어 다른 건 뭐가 있을까 ID:I55f6i4N(2/2)
0248 익명 2023/09/22(금) 12:15:07.45
숫자 리스트 l=[1,10,3] 같은 걸 1 10 3처럼 출력하고 싶어. 마지막에는 공백이 없어야 한다고 하자 처음에는 putStrLn $ intersperse ' ' $ foldl' (\acc x -> acc ++ show x) [] l 이런 걸 생각했는데 10도 1 0처럼 분해돼 버렸어 어쩔 수 없이 지저분한 이런 코드를 썼는데 더 좋은 방법은 없을까 mp [] = return () mp [x] = putStrLn $ show x mp (x:xs) = do putStr $ show x ++ " " mp xs 1 ID:NjV4q9P3(1/2)
0249 익명 2023/09/22(금) 13:06:36.18
https://jutememo.blo...ata-intersperse.html ID:8SLDLfd5
0250 익명 2023/09/22(금) 14:01:02.50
putStrLn $ intercalate " " $ map show l 이걸로 됐습니다 ID:NjV4q9P3(2/2)
0251 익명 2023/09/22(금) 14:01:12.58
지저분하다는 것만으로 죄가 있는 것처럼 일상적으로 세뇌당하고 있으니까 정말 유죄 확정된 녀석은 절대 용서받지 못하는 거겠지 당연하지 ID:W8j4O+ex
0252 익명 2023/09/27(수) 15:30:51.70
{-# LANGUAGE BinaryLiterals #-} 이 확장을 넣어도 let t = read "0x111" :: Int -- 16진수로 파싱할 수 있음 273 let s = read "0b111" :: Int -- 2진수로는 파싱할 수 없음 미묘하게 불편해 ID:9Ywamwi5
0253 익명 2023/09/27(수) 17:59:16.99
read가 정의된 모듈은 다른 LANGUAGE라는 거야? ID:k7PwLxD8
0254 익명 2023/10/11(수) 15:16:15.28
groupBy (\a b -> snd a == snd b) 이걸 괄호 없이 쓸 수 있을까요 groupBy ((==)<$>snd<*>snd)라고 하면 (a,b)->Bool이 되어서 (a,b)->(c,d)->Bool이라는 타입과 일치하지 않았습니다 1 ID:1pnnvG+R(1/2)
0255 익명 2023/10/11(수) 17:39:54.48
254 import Data.Function groupBy ((==)
on
snd)
결국 괄호는 쓰지만, 이게 원하는 답일까요 ID:Fikp0OWy
0256 익명 2023/10/11(수) 22:05:36.63
괄호 없이가 아니라 람다 없이였습니다 딱 원하던 게 그거예요 감사합니다!! ID:1pnnvG+R(2/2)
0257 익명 2023/10/18(수) 05:38:40.90
QuickCheck를 공부하고 있는데 실행 시간 오류를 찾고 싶어서 다음과 같이 썼습니다 an의 요소는 2 이상 n 이하이고 여러 번 나옵니다 테스트 케이스가 거의 discard되는데 리스트를 choose (2,n) 같은 걸로 생성하려면 어떻게 해야 할까요 verboseCheck를 지정하면 skipped 투성이인데 건너뛴 건 표시하지 않았으면 좋겠어
prop :: Positive Int -> [Int] -> Property prop (Positive n) an = all (>=2) an && length an == n ==> monadicIO $ do a' <- run (solve n an) assert True ID:vCrdR6l9
0258 익명 2023/11/16(목) 18:41:54.01
오카베 켄, 부활했어!
X에서 “Ken140291“ 로 검색해봐.
최근에 가입한 것 같아. 1 ID:wXoixzgD
0259 익명 2023/11/18(토) 16:03:54.22
직접 쓰고 있는 거 아닐까.... ID:sLhTkQlu
0260 익명 2023/11/19(일) 15:31:44.23
248 init $ folfl (\a x -> a++[show x]++“ “) ““ [3,10,1] 로 OK ID:/inwpH7b
0261 익명 2023/11/20(월) 09:46:08.35
260 잘못 썼다! lnlt$foldl(\a x->a ++show x++" ")[][1,10,3] 가 정답. ID:sZ0M6Dsh
0262 익명 2023/11/20(월) 14:32:44.66
258 꺄하하하하하하 ID:4MiKC4cJ
0263 익명 2023/11/20(월) 21:45:30.49
https://github.com/k...om-scratch-ja#before
Unkown(모르고 있음)
ウンコウン 웃기네. ID:Jf1v4QK8
0264 익명 2023/11/20(월) 23:57:47.37
스레드 주제에서 벗어났어 ID:N43MAaAU
0265 익명 2023/11/21(화) 12:01:48.14
털벽 씨 부활했어!! ID:MS7pneIs
0266 익명 2023/11/21(화) 12:21:46.16
털벽(오카베 켄)에 대해서는 여기가 자세해 ID:W0g+S6dW
0267 익명 2023/11/22(수) 15:27:17.26
이런 코드가 있는데 cumsum k = unfoldr next . (,) 0 where next :: (Int, [Int]) -> Maybe (Int, (Int, [Int])) next (acc, x : xs) | acc <= k - x, acc' <- acc + x = Just (acc', (acc', xs)) next _ = Nothing acc <= k-x는 알겠는데, acc' <- acc + x는 무슨 문법인가요? 리스트 내포 표기법도 아니고 조건식 부분에서 모나드를 다루고 있는 것도 아니죠? 1 ID:1OepVPCl
0268 익명 2023/11/22(수) 16:31:30.12
267 패턴 가드 아닐까 https://ko.wikipedia.org/wiki/%ED%8C%A8%ED%84%B4_%EB%A7%A4%EC%B9%AD ID:PuIW3qrN
0269 익명 2023/11/23(목) 07:24:43.49
<-는 패턴 가드 수식자라고 부르는 거군요 처음 알았습니다 감사합니다 ID:WRBO39fy
0270 익명 2023/11/24(금) 17:42:26.91
털벽의 트위터 새 계정은
Ken140291 FPFSstutorial leadmove3648637
입니다!! 1 ID:V3Fz2AWZ
0271 익명 2023/12/04(월) 12:27:24.28
270 꺄하하하하하하 ㅋㅋ ID:GjmDAseS
0272 익명 2024/01/01(월) 20:17:21.69
mapAccumL/R를 어떨 때 쓰는지 잘 모르겠는데 어떨 때 쓰는지 같은 지침이 있나요? ID:DcfOChZv
0273 익명 2024/01/09(화) 22:50:44.14
최근 5년 동안 출판된 Haskell 책 중에 가장 훌륭한 걸 소개해주세요 ID:3mg8b04T
0274 익명 2024/01/12(금) 10:55:28.35
퇴물 ID:cAhPSGjh
0275 익명 2024/02/29(목) 01:38:01.78
Windows에 설치가 안 되는 것 같네 cabal이 오류? 뭐 Windows에서는 하지 말라는 거겠지 ID:d2gqoSk4
0276 익명 2024/03/03(일) 23:47:35.89
모나드에 대해서, 바닥 배선에 비유하거나, 세계를 받아서 부작용 후의 세계를 반환한다고(IO 모나드에 대해서) 말하거나 하는 게 당시에는 이해가 안 돼서, 생각해본 결과
뭔가에서 값을 꺼내서, 함수를 적용하고(그 함수가) 뭔가에 값을 반환하는 "움직임"을 모나드라고 한다.
라는 결론이 났었는데, IO 모나드를 포함해서 더 좋은 비유는 없을까 생각해본 결과,
모나드는, 아웃소싱(외부 의뢰)을 수학적으로 표현한 것이다.
라는 결론에 도달했다.
아웃소싱처가 (수학의) 바깥 세계면 IO 모나드이고, 같은 수학 세계면 다른 모나드.
그렇게 생각하면, Haskell 자체는 "이 함수 실행해줘~"라고 의뢰하고 결과를 받을 뿐이니까, 부작용은 없다는 주장에 모순은 없다(는 건가?) (아니면, IO 모나드는 Haskell이 받을 수 있는 형태의 값을 반환하는 입출력 "기계어"를 반환하는 건가?)
그렇게 생각하면, 수학이 "수학 밖과의 주고받음"이라는 개념을 얻었다고 생각하면 대단해. ID:9XAeTkis
0277 익명 2024/03/04(월) 00:46:59.53
상자 안에 처리하고 싶은 데이터가 들어있는데 같이 IO 바이러스도 들어있어서 그냥 상자를 열면 IO 바이러스가 외부 세계에 누출돼서 곤란하니까 한 겹 더 큰 상자를 준비해서 그 안에 상자랑 데이터 처리 장치를 넣고 밀봉한 다음 안쪽 상자를 열어서 데이터를 처리하는 거야
그러면 상자 안에 처리된 데이터랑 IO 바이러스가 들어있는 상태가 돼 이걸 계속 반복하는 게 IO 모나드야
옛날에 독가스로 생각했던 비유인데 요즘은 이거야 ID:XMYw3zR0(1/2)
0278 익명 2024/03/04(월) 01:02:22.82
흠... 가정해서 어셈블리어랑 1대1로 대응하는 C 함수를 전부 Haskell에서 호출할 수 있게 하면, 가능하겠지. (do 형식이면 완전히 어셈블리어 코드처럼 보이는 Haskell 코드가 완성될 거야)
그렇게 생각해서 내 아웃소싱 설이 나온 느낌이네. Haskell이 모나드를 채택한 건 수학(함수형 언어였나?)의 패배라고 어디선가 읽었고. ID:vyClhVzf
0279 익명 2024/03/04(월) 01:22:40.61
do의 경우 한 줄마다 새 상자가 만들어져 순서는 가끔 바뀌지만 안쪽 상자의 데이터는 바깥쪽 상자에서만 쓸 수 있으니까 필요한 순서는 보장돼
외부 세계의 예측 불가능한 상태를 전부 하나의 상자 안에 밀어 넣고 상자 바깥쪽의 처리 장치 제조 공장은 전부 예측 가능(순수)하게 하는 느낌
수학의 패배라는 의미는 잘 모르겠지만 실용성을 위해서 예측 불가능한 상태를 들여온 거 아닐까 ID:XMYw3zR0(2/2)
0280 익명 2024/03/06(수) 10:29:39.18
뭔가 거창한 비유를 쓰고 싶어 하는 녀석이 늘었네 코딩하는 데 무슨 도움이 되는 건데 ID:Yy7OLBEk
0281 익명 2024/03/06(수) 15:29:14.97
"꼬리 호출하고 싶은 함수를 데이터 생성자로 바꾼다"라는 가설은 도움이 되지만 (>>=)는 생성자가 아니라는 사실을 보자마자 가설을 버리는 건 과학적으로 자주 있는 일이야 ID:soRPwZI7
0282 익명 2024/04/10(수) 04:46:37.45
Windows에서 ghcup을 설치하는 데 WSL이 필요 없어지고 PowerShell만으로 설치할 수 있게 됐어 ID:+L19CyUd
0283 익명 2024/04/13(토) 09:43:59.70
Rust 스레드에서 알았는데 Haskell을 엄격하게 만들고 의존형을 넣은 Idris(Idris 2)라는 언어가 있구나 ID:p3ysjEUv(1/2)
0284 익명 2024/04/13(토) 10:37:58.47
Idris까지 관심 있다면 Haskell/Elm/Rust/Zig 흐름으로 개발되고 있는 Roc-lang도 봐두면 좋아 특히 정적 참조 카운팅 관련해서 ID:VEwLcqlL
0285 익명 2024/04/13(토) 22:46:49.50
모르는 게 많았네, 고마워 정적 참조 카운팅이라는 게 유행하는 건가 최근 Haskell에도 Rust 같은 한 번만 쓸 수 있는 선형 타입(Linear Haskell?)이 도입됐네 ID:p3ysjEUv(2/2)
0286 익명 2024/04/14(일) 08:32:57.22
IO 모나드의 입력 함수도, 인자가 없는 함수 = 변수라고 생각하면, 사실상 선형 타입과 같아.
let x = 0 in return (x + 1) >>= x -> print x
이렇게 하면 변수 x는 섀도잉으로 같은 이름의 다른 변수가 생성돼.
getLine 같은 입력 함수는 Haskell(수학) 밖에서 초기화되는 변수라고도 생각할 수 있어. ID:ZXz6cRZI
0287 익명 2024/05/17(금) 10:56:06.61
참조 카운트는 0이 되면 즉시 소멸자를 호출해 즉 호출을 지연하지 않아 엄격하게 만드는 거랑 참조 카운트를 넣는 건 사실상 같은 거야 ID:kEVlBeR0
0288 익명 2024/05/18(토) 22:55:12.58
cabal 버전이 올라가서 Windows에서 시험해보니까 잘 되네 신경 써주고 있었구나 ID:HEnIptqp
0289 익명 2024/06/11(화) 20:46:47.08
IO 모나드를 확장해서, 부작용을 DB에만 한정한 모나드 같은 거 만들 수 없나? ID:zqrBHeqN
0290 익명 2024/06/20(목) 02:22:58.45
어느새 Haskell이 C#보다 빨라졌어... https://nshinchan01....ry/2024/06/20/021327 ID:s4SRXQdp
0291 익명 2024/06/23(일) 11:34:59.09
죄송합니다 GHC의 Windows 11 지원에 대한 질문인데 "9.2" 이전의 GHC는 Windows 11을 지원하지 않는다고 하는데
https://gitlab.haske...is/platforms/windows
이건 프로그램을 컴파일해서 애플리케이션을 생성할 수 없다는 것뿐이고 콘솔에서 실행하거나 학습하는 데는 "9.2" 이전의 GHC라도 문제없다는 인식으로 괜찮을까요?
라이브러리가 9.0을 지원하지 않는 게 있어서 확인하고 싶습니다. ID:1+Xj+JzS(1/2)
0292 익명 2024/06/23(일) 21:13:21.29
계속 죄송합니다.
GHC의 Windows 11 지원에 대한 질문 건 Windows 11 PC에 GHC 8.x를 설치해서 시험해봤는데
문제없이 콘솔에서 실행해서 결과 데이터 파일을 생성할 수 있었습니다.
일단 이걸로 해보겠습니다. ID:1+Xj+JzS(2/2)
0293 익명 2024/07/03(수) 21:32:31.40
Functor는 f : value -> value 함수를 fmap f : computation -> computation 함수로 확장해서 이것저것 하는데, 애초에 value -> value 함수가 필요 없지 않아?
굳이 value랑 computation을 구분해서 어려워지는 거니까, 전부 Functor를 적용한 상태로 computation -> computation 확장 함수만 쓰도록 설계를 다시 하면 더 많이 쓰이지 않을까? ID:FVo2vRsM
0294 익명 2024/07/03(수) 23:29:27.98
무슨 말이야? ㅋㅋ ID:XPii5wC3
0295 익명 2024/07/04(목) 00:05:21.90
computation으로 만들면 이론적으로 캡슐화돼서, 예를 들어 T computation용으로 만든 함수는 U computation에서는 쓸 수 없어. 그래서 일반적으로 value -> value로 만들어서 T computation에서도 U computation에서도 쓸 수 있게 하는 건 알겠어.
하지만, 그런 부분이 불편해서 많이 안 쓰이는 거 아닐까 생각해서, T computation용으로 만든 함수도 별다른 조작 없이 U computation 함수로 쓸 수 있게 되면 더 쓰기 쉬워질 것 같아.
아니면 Haskell에서 computation 개념은 백해무익한 거 아닐까. 1 ID:CIK9cQRa(1/2)
0296 익명 2024/07/04(목) 14:17:13.04
295 네가 말하는 computation은 어떻게 정의하는 건데? ID:PVQ//B0J
0297 익명 2024/07/04(목) 19:36:46.28
모르겠는데. 일단 진지하게 답변하자면, value랑 비슷하지만 뭔가 다른 거, 정도일까.
내 의도는, "컴퓨터"에서 생성된 데이터야. 컴퓨터는 전자계산기에 한정되지 않아. 계산기여도 되고, 주판이어도 되고, 계산할 때 기반이 되는 숫자 표현 같은 걸 computation이라고 불러도 문제없다고 생각해.
예를 들어, value: 27 에 대해서 전자계산기에서는 11011(2) 로 표현되는 게 computation이야.
주판이라면 주판알의 배치. 계산해서 탁탁 소리가 나는 게 부작용.
반대로 말하면 value 쪽이 이해하기 어려운 것 같아. 계산하고 있는 컴퓨터 밖 세계의 뭔가 숫자 데이터 같은 느낌이 들어서 굳이 그렇게 구분해야 하나? 싶어. 1 ID:CIK9cQRa(2/2)
0298 익명 2024/07/04(목) 23:38:08.08
297 computation은 value 중 하나야
5 + 3
이 computation이고Just 8
도 computation이고 1 ID:iUDrYol2
0299 익명 2024/07/05(금) 00:05:27.16
298 computation이 value 중 하나라면 개념적으로 computation ⊆ value 가 되는데. 적어도 확장하고 있으니까 computation ⊇ value 가 돼야 하지 않아?
5 + 3
이 computation이라는 건 전제에 따라서 다르니까 뭐라고 말할 수 없다고 생각해.
계산해서 8(= 5 + 3)을 도출했다면 8은 computation이라고 생각하지만.
예를 들어, 곱셈이었을 때, 구구단을 외워서 "오삼 십오"로 15를 도출했다면 계산하지 않은 거니까 value라고 생각해.
1
ID:b38yqPqv(1/2)
0300 익명 2024/07/05(금) 00:53:37.68
299 이상하지 않아 OOP에서 클래스 A를 상속해서 클래스 B를 만들었을 때(B extends A)를 생각해봐
구구단을 외워서 오삼 십오의 결과를 도출하는 게
computation이고
도출된 결과랑 도출하는 계산을 구분하는 거야
1
ID:DkqpNxkH
0301 익명 2024/07/05(금) 02:03:56.64
역시 Haskell 스레드에 computation 얘기 아는 사람이 있었구나.
300 OOP에서 클래스 A를 상속해서 클래스 B를 만들었을 때(B extends A)를 생각해봐 여기는 납득해.
도출된 결과랑 도출하는 계산을 구분하는 거야
뭔가 f: value -> computation 타입의 함수를 염두에 두고
f ()
는 computation이라고 하는 거 아닐까?
의도를 잘못 이해하고 있을지도 모르지만, computation은 어디까지나 도출된 결과겠지. 그리고, 함수의 반환값을 도출하는 계산을 하는 데 있어서 나오는 효과를 정의에 포함하려고 하는 것 같았는데, 그건 어디까지나 value -> computation 타입의 함수를 계산하는 데 수반되는 성질이지 computation 개념 자체는 아니라고 생각하는데. 어디까지나 computation 개념 자체는 그런 함수를 계산해서 얻은 계산 결과 아닐까. 그렇게 생각하면 뭔가 문제 되는 예시 같은 거 있어? ID:b38yqPqv(2/2)
0302 익명 2024/07/25(목) 23:56:39.51
State나 IO 모나드는 Haskell 외에도 쓰이는 곳이 있나? Maybe나 Either는 함수형이 아닌 언어에도 같은 게 있어서 이해되는데, State나 IO는 딱히 편리해 보이지 않아 1 ID:zdgCFOr2
0303 익명 2024/07/26(금) 05:41:42.96
302 그럴 만도 한 게, IO 모나드는 다른 언어 예를 들어 C 언어 계열이면 hoge();의 ";" 부분을 수학적으로 표현한 것뿐이니까. 겉보기만 보면
x = x + 1; printf("%d\n", x);
를
return (x + 1) >>= \x -> print x
do 형식으로 바꾸면
x <- return (x + 1) print x
다만, x <- 부분은 같은 이름의 다른 변수를 섀도잉하고 있어서, 엄밀하게 메모리 동작까지 맞추려면 IORef를 써야 해.
Haskell 입장에서는 메모리도 IO 처리(파일 처리 포함)도 똑같이 외부로의 입출력이라는 취급이야.
그래서, 실용적으로는 의미가 없어. 언뜻 여러 줄처럼 보이는 코드가 사실은 전부 한 줄로 쓸 수 있다는 감동은 있지만, 그뿐이야.
Haskell을 매개로 수학이랑 프로그래밍 언어의 관계를 연구하거나 할 때는 편리해.
반대로 직접 IO 모나드를 Python 같은 적당한 언어로 구현해서 모든 코드를 함수처럼 쓸 수 있어. (Python에서는 연산자를 직접 만들 수 없으니까 f = (>>=) 같은 식이 돼)
Haskell은 편리해서 쓰는 게 아니야. 아름다워서 쓰는 거야.
아, 하지만 그래도 최신 버전은 실행 속도가 꽤 빨라졌으니까(C#/Java 정도), 선택지에서 제외될 이유도 줄어든 것 같아. ID:JmafwQnp(1/3)
0304 익명 2024/07/26(금) 05:47:41.29
거기까지 생각하면, Gtk2hs라든가 Win32 같은 C/C++ 래퍼 라이브러리를 함수형 언어답지 않아!라고 거부하는 마음을 모르겠어. ID:JmafwQnp(2/3)
0305 익명 2024/07/26(금) 06:16:02.54
아, IO 모나드의 장점이 하나 있었네. 입력 함수가 다른 함수의 인자가 되거나, 다른 함수에 함수 합성할 수 없어. Python의 print(input()) 같은 코드나, len(input()) 같은 코드는 불가능해. 여기를 확실하게 구분해서, 그런 이상한 사용법으로 인한 오류는 안 나.
더 넓은 관점에서 말하면, 입출력이 IO 모나드라는 타입으로 나뉘어 있으니까 중첩된 루프 안에서도 입출력할 때 타입을 의식할 필요가 있어서, 그런 버그가 많이 줄어.
절차형 함수형 관계없이, 중첩된 루프 안의 데이터가 지금 어떤 상태인지 머릿속으로 파악할 수 있는 사람은 그렇게 많지 않아.
그래서, 디버깅할 때 풀어나가는 건데, 함수형 쪽이 구분하기 쉬울지도? ID:JmafwQnp(3/3)
0306 익명 2024/07/26(금) 06:20:50.81
Haskell의 그 다음이 보고 싶어? Rust에 그 답이 전부 들어있어 1 ID:EERDttnJ
0307 익명 2024/07/26(금) 08:11:21.54
누가 좀 알려주세요. 수학의 구성이나 명제 증명에 쓴다면, Haskell이랑 OCaml 중에 어느 쪽이 좋을까요? 4 ID:3P5OnSpM
0308 익명 2024/07/26(금) 12:15:47.14
Rust는, 메모리가 너무 잘 보이는 게 싫어~ 대단한 거 안 쓸 거니까, GC 있는 걸로 부탁해 ID:f34zQmtT
0309 익명 2024/07/26(금) 17:24:09.33
307 너무 막연해 다시 해봐 ID:HoH4md/R
0310 익명 2024/07/26(금) 17:58:43.47
수학의 구성? ID:dth0vnjc
0311 익명 2024/07/27(토) 00:29:15.86
307 Coq라는 증명 보조 프로그래밍 언어를 쓰세요.
Haskell에서도 타입 프로그래밍으로 열심히 직접 명제를 증명할 수 있다고 하지만, 어느 정도 자동화된 전용 언어가 좋겠죠. Coq는 그중에서도 한국어 정보가 많습니다. 1 ID:r3Qeb3es(1/4)
0312 익명 2024/07/27(토) 00:43:27.29
306 실용 언어, 특히 임베디드 분야를 대체할 거라고 기대되고 있어. 특집 기사는 없어도 주제 스레드 같은, Rust로 문제를 풀어보자 같은 연재가 계속되고 있는 걸 보면, 특히 Interface 편집진의 열정은 느껴져.
Haskell도 선구자의 글에 따르면 웹용으로는 신의 언어라고 하더라. 다만, 주변 환경이 미비할 뿐. (그래서, 직접 전부 만든다는 가시밭길을 갈 "각오"가 필요하다든가) 아직도 그렇지 않기를 바라지만... ID:r3Qeb3es(2/4)
0313 익명 2024/07/27(토) 00:53:19.48
307 숫자 구성 쪽은, 대수적 타입이랑 기본적인 거라면 (일부) deriving으로 자동 생성해주니까, Haskell은 굉장히 편해. print 함수로 표시하는 부분만이라도 자동 생성해달라고 할 가치가 있어. (Read, Enum, Ord로 생성되는 건 확인했어)
data Nat = Zero | Succ Nat deriving (Show)
연속 함수는 PC 자체의 한계로 불가능해. 대수적 타입으로 메모리가 허용하는 범위라면 소수도 만들 수 있을지도 몰라. (그 전에 리스트든 뭐든 10진수 자릿수 표기법을 도입하지 않으면, Nat는 무한 진수니까 소수점 첫째 자리가 1만이라든가, 무한히 자릿수 올림하지 않는 구조가 돼) 1 ID:r3Qeb3es(3/4)
0314 익명 2024/07/27(토) 13:46:44.73
307 결국 이 녀석이 아무 답변도 안 하는 걸 보면 아무렇게나 써놓고 갔다는 걸 알 수 있어 진지하게 상대하지 않는 게 좋아 1 ID:f/jP9uGd
0315 익명 2024/07/27(토) 16:19:23.58
313 감사합니다. ID:Z663WedI
0316 익명 2024/07/27(토) 17:29:46.87
311-313이랑 >>314는 같은 사람이야 속지 마 1 ID:sW1zoNGb
0317 익명 2024/07/27(토) 21:26:10.11
알았어 ID:wvv58UYW
0318 익명 2024/07/27(토) 23:34:35.07
316 다른 사람인 척할 생각도 없었는데?(ID 보면 알잖아) 참고로 >303-305도 나야.
하루에 2~3번 정도밖에 안 보니까, 쓸 수 있는 건 한꺼번에 쓴 결과야. ID:r3Qeb3es(4/4)
0319 익명 2024/08/01(목) 12:24:32.72
프로세서 제조사는 AI 붐이라고 보자마자 앞다퉈 AI 처리 특화 프로세서 개발 경쟁 함수형 언어에 특화된 처리에 특화된 프로세서는 아무도 안 만들어줘 1 ID:XzWUPxYY
0320 익명 2024/08/01(목) 16:36:21.75
그게 필요해? ID:rWBa8MOA
0321 익명 2024/08/04(일) 23:21:47.06
319 스택 컴퓨터는, Lisp 때 망했어. ID:y1wQ9MUm
0322 익명 2024/08/05(월) 21:33:27.17
일본 기업이 Lisp 전용 기계를 만들었는데 5세대 컴퓨터 프로젝트가 💩라서 제대로 된 성과를 하나도 못 냈잖아. ID:FcOscapW
0323 익명 2024/08/11(일) 17:42:41.08
산기슭에서 정상을 목표로 한다
foldl: 걸어서 정상까지 올라가면 미끄럼틀로 반대편으로 내려가서 곤돌라를 타고 다시 정상으로 돌아와서 골인 foldr: 곤돌라를 타고 바로 정상으로. 거기서 반대편 산기슭까지 미끄럼틀로 내려가서, 거기서 정상까지 걸어서 돌아온다. 다만 가능하면 미끄럼틀을 중간에 내려서 거기서 정상까지 걸어서 돌아와서 골인해도 된다
이런 거야? 1 ID:7wNJGHOt
0324 익명 2024/08/12(월) 21:44:35.95
Prelude 라이브러리 문서 페이지가 최신 Chrome에서 자주 응답 없음이 되는데! 요즘 PC에서도 끊김 현상을 일으키는 페이지라니 대단하네!(화남) 1 ID:EAbaqMlq
0325 익명 2024/08/13(화) 01:44:03.00
324 hoogle 쓰세요. ID:3Ko8/FbA(1/2)
0326 익명 2024/08/13(화) 01:45:16.10
323 foldl = 꼬리 재귀를 고차 함수화 foldr = 일반 재귀를 고차 함수화 ID:3Ko8/FbA(2/2)
0327 익명 2024/08/15(목) 10:15:40.11
Yesod를 도입하려고 조사하고 있는데, 지금은 stack 기반이고 cabal로는 쓸 수 없는 건가요? 도입 관련 글에는 cabal 설명이 있는데, yesod init 하면 stack new 쓰라고 나와요. ID:oieuoNWz(1/2)
028 익명 2024/08/15(목) 10:30:38.08
yesod-bin 1.6.2.3 입니다 ID:oieuoNWz(2/2)
0329 익명 2024/08/19(월) 21:35:37.73
Ramda.js의 fold에 해당하는 함수를 알려주세요 ID:CkMOJkdv
0330 익명 2024/08/24(토) 05:56:24.20
지금은 ghcup 시대 아닌가? 오랜만에 Haskell 쓰려고 돌아온 뒷북쟁이가 stack을 최신 버전으로 만들려고 하니까 ghcup 같은 걸 소개해줘서 유행에 약해서 넘어갔어 ID:WHJg2+SV
0331 익명 2024/08/24(토) 07:38:35.09
G컵, 하악하악 ID:E4GXjFrz
0332 익명 2024/08/28(수) 21:41:00.96
유튜브에서 한동안 친절하게 Haskell을 설명하던 사람이 어느 날 "못 해먹겠네, 난 이제 Haskell로 프로그래밍 안 해"라고 선언하고 Haskell에서 떠난 걸 보고 결국 그 정도 언어구나 싶어서 실망했어 2 ID:HNkudrYA
0333 익명 2024/08/28(수) 23:56:40.97
332 Haskell은 모나드의 실증 언어라는 측면이 강하니까, 모나드는 결국 잘 모르겠는 거라는 결론에 도달한 지금은 화제도 없고, Haskell로 조회수를 못 벌겠지. ID:FNkSebMV
0334 익명 2024/08/29(목) 12:50:10.24
직접 만든 라이브러리의 (+)랑 Prelude.+가 겹쳐서, Prelude.+를 쓰고 싶을 때마다 매번 수식하는 게 귀찮고 코드도 지저분해져요 겹쳤을 때 기본적으로 Prelude.+를 쓰도록 지정할 수 없나요? 2 ID:D5XAFbVY
0335 익명 2024/08/29(목) 12:53:31.30
332 +1 ID:1jszJs3n(1/2)
0336 익명 2024/08/29(목) 12:54:42.14
334 직접 만든 쪽을 수식해 ID:1jszJs3n(2/2)
0337 익명 2024/08/29(목) 14:06:11.00
334 둘 다 쓸 예정이 있는데, 왜 굳이 같은 기호로 했을까... 나는 직접 만든 쪽을 (.+) 같은 식으로, 미묘하게 바꿔. ID:gtm/5H5m(1/4)
0338 익명 2024/08/29(목) 14:06:50.30
사용 예시: 1 .+ 1
2 ID:gtm/5H5m(2/4)
0339 익명 2024/08/29(목) 16:27:15.59
싫어 싫어! 수식하기 싫어! 어느 쪽 +인지 알아서 자동으로 선택해줘! 1 ID:Nq0HdWD9
0340 익명 2024/08/29(목) 16:57:49.70
무슨 직접 만든 타입인지 모르겠지만 Semigroup 구현해서 (<>)로 하면 되잖아 ID:YXIyrRhD
0341 익명 2024/08/29(목) 17:40:12.63
취직해 ID:aIGVGYPU
0342 익명 2024/08/29(목) 20:48:46.38
339 독자적인 (+)를 자동으로 구분해서 쓰게 하려면 Num 타입 클래스의 인스턴스로 만들어야 하는데, 그래도 구분하려면 타입이 달라야 해.
독자적인 (+)는, 독자적인 타입을 받나요? 그렇지 않으면 Prelude의 (+)랑 구분할 방법이 없는데. ID:gtm/5H5m(3/4)
0343 익명 2024/08/29(목) 20:51:12.20
아, 가능하면 타입 선언을 보여주면 조언하기 쉬워. ID:gtm/5H5m(4/4)