Competitive programming with Haskell Functional Festival 2025 in TOKYO
Competitive programming with Haskell Functional Festival 2025 in TOKYO
ä¹ ãã¶ãã«(10å¹´ã¶ãã«ï¼)Haskellæ¸ããããªã£ãã®ã§ç°å¢æ§ç¯ãã¦ããã TS ããµããµãè¨èªä»æ§éãã¦ãAIã«å¥½ãã«æ¸ãããã¨å´©å£ãããã³ã³ãã¤ã«ã®é£æåº¦ãé«ãã¦ãåã®è¡¨ç¾åãé«ãHaskellã§ã©ãã¾ã§ããããããã¹ããããã (ä»å Rust ã§ãªãã®ã¯ãã·ã¹ãã ã¬ãã«ã§ã¯ãªãæå³è«æ½è±¡ã«ä¸»ã«ãã©ã¼ã«ã¹ãããããã å ·ä½çã«ã¯ Extensible Effects ã使ããã) åæã§ããããããã³ãããæ¸ããã ç§ã¯ haskell ã®ã¨ãã¹ãã¼ãã§ãã¦ã¼ã¶ã¼ã« haskell ã®ä½¿ãæ¹ãæããªããã³ã¼ããæ¸ãã¾ãã ã¦ã¼ã¶ã¼ã¯ TypeScript ã®ã¨ãã¹ãã¼ãã§ãå¤å°ã®Rustã®ç¥èãããã¾ããHaskell ã¯åå¿è ã§ãã ãã®ããã¸ã§ã¯ãã¯ææ°ã® cabal ã§ã»ããã¢ããããã¦ãã¾ãã stack ã使ããã cabal ã®ã¿ã使ã£ã¦ãã«ãã¨ä¾åé¢ä¿ã®ç®¡çãè¡ãã¾
ã¯ããã« æ¬è¨äºã¯ãä»åçè ã使ããHaskellã®ã¨ãã§ã¯ãã·ã¹ãã ã©ã¤ãã©ãªã®èæ¯ã説æãããã®ã§ããHaskellã«è§¦ãããã¨ããªãèªè ã®ããã«ãçè§£ã«å¿ è¦ãªäºæãææ³çã¯è¨äºä¸ã§ç°¡åã«èª¬æãã¾ããHaskellãã©ã¤ãã©ãªèªä½ã«èå³ããªãã¨ããã¨ãã§ã¯ãã·ã¹ãã ã®ç´¹ä»ã ãã§ãä»å¾ã®åèã«ãã¦ããã ããã°å¹¸ãã§ãã ã¨ãã§ã¯ãã·ã¹ãã ã¨ãã§ã¯ãã·ã¹ãã ã¨ããããã°ã©ãã³ã°ãã©ãã¤ã ã以åããç ç©¶ããã¦ãã¾ããã ããã¯ãããã°ã©ã ã®ã³ã¼ãå ã§èµ·ããããå¯ä½ç¨ãåé¡ãã¿ã°ä»ãããå®è¡æããåã«åããããã«ããã¨ãããã®ã§ããããã§ã¯ãå¯ä½ç¨ãåé¡ãã¦ååãä»ãã¦åã¨ãã¦è¡¨ãããã®ãã¨ãã§ã¯ãåã¨å¼ã³ãããã³ã¼ãçãçºçãããããã¹ã¦ã®ã¨ãã§ã¯ãåã®éåãã¨ãã§ã¯ãéåã¨å¼ã¶ãã¨ã«ãã¾ãã ä¾ãã° 1+1 ãã®ããã°ã©ã ã®ã¨ãã§ã¯ãéåã¯ç©ºéå{}ã§ãããªããªããä¸åã®å¯ä½ç¨ï¼å ¥åºå
Haskellã®ã«ã¬ã³ãã¼ | Advent Calendar 2023 - Qiita 3æ¥ç®ã®è¨äºã§ãã Haskell ã® Array (é å) ã«ã¤ãã¦æ¸ããã¨æãã¾ããHaskell ã® Array ã¯ç´¢å¼ãåã¯ã©ã¹ã® Ix ã§æ½è±¡åããã¦ãããããç¹ã«é åã®æ¬¡å ãæ¡å¼µããéã«æè»æ§ãããã¨ã¦ã便å©ã§ãã ãããªä¾¿å©ãª Array ã§ããããã¨ã㨠Haskell ã¯ãªã¹ãæä½ãå¼·åã¨ãããã¨ããã£ã¦ããæ¢åã®åèæ¸ãã¿ã¦ã Array ã®è§£èª¬ã¯ã»ãã®å°ãã«ã¨ã©ã¾ã£ã¦ãããã解説ããªããã¨ãã»ã¨ãã©ã§ãã Array ãå¿ è¦ã«ãªãå ´é¢ã®å¤ãã¯ããªã¹ãã 㨠!! ã«ããã¤ã³ããã¯ã¹ã¢ã¯ã»ã¹ã§ O(n) ã«ãªã£ã¦ãã¾ãéã«åããªããã¨ããå ´é¢ãå¤ãã¨æãã¾ããããã Haskell ã«ã¯ã¤ã³ããã¯ã¹ã¢ã¯ã»ã¹ã O(1) ã® Vector (vector: Efficient Arra
åæ© æè¿ãchatGPTã«ããããå°ããã®ãæµè¡ã£ã¦ããããããHaskellã§æåãªã¢ããã®æ¦å¿µããªãå°å ¥ããããå°ãã¦ãã人ãè¦ããã¦ãããããããããè¨äºè¦ããã¨ãªããªã¨æã£ãã®ã§é©å½ã«èª¿ã¹ãã 䏿¬¡ã½ã¼ã¹ å ãã¿ã¯ä»¥ä¸ã®ãã¤ãã¼ã ã¨æãããæç® An abstract view of programming languages Eugenio Moggiææã®ããã¾èªã¾ãã¦ãªãæ¹ã®è«æ Denotational Semantics Peter D. Mossesææã®ãã®è«æï¼2é¨ãã£ã¦å¾åã®æ¹ï¼ é¦è¨³ãããé¦è¨³ã§èªãã ã ããã°ã©ãã³ã°ã®ã¢ããçºè¦ã®çµç·¯ ããã°ã©ãã³ã°ã®ã¢ããã¯ãªããå ãã ãæãåºãããè¦ãããªæãã®æ¦å¿µã§ç¥ããã¦ã¾ãããããã°ã©ãã³ã°ã®æ¦å¿µãã¢ã¸ã¥ã¼ã«åããæ©æ§äºã ã®éçºã®å段éãããããããããªã¹ãã ãIOã ãä¾å¤å¦çã ãã®æ¦å¿µãããããä¸ã¤ã®ã¢ã¸ã¥ã¼ã«ã«
// å²ã2ããã颿°ã®å¼æ°ãå¶æ°ã§ãããã¨ãåã«ãã£ã¦å¼·å¶ããä¾ï¼å®ç¨æ§ã¯ãªãï¼ data O // æ°åã®0ã表ããã¼ã¿å data S(A) forall { A } // +1ã表ããã¼ã¿å // åã¨ã¤ãªã¢ã¹ type Nat = O | S[Nat] // éå¹çãããä»åé·æ´æ° type Even = O | S[Odd] type Odd = S[Even] // å¶æ°ã弿°ã«ã¨ã£ã¦2ã§å²ã£ãçµæãè¨èªçµè¾¼ã¿ã®æ´æ°ã¨ãã¦è¿ã颿° div2 : Even -> I64 = // ç¶²ç¾ æ§ãã§ãã¯ã¤ãã®ãã¿ã¼ã³ããã | O => 0 | S(S(n)) => 1 + n.div2 TL;DR ã¦ããªã³åã¯ç´ååã®ä¸ä½äºæã§ããï¼è¿½è¨ããï¼ã颿°åè¨èªãä½ãã¨ãã¯ç´ååã®ä»£ããã«ã¦ããªã³åãæ¡ç¨ããã®ãããã ã¯ããã« Cottonã¨ããããã°ã©ãã³ã°è¨èªã2021å¹´ã®å¤é ããä½
Rustã®ããã¥ã¡ã³ããèªãã ãTwitterã§åã«ã¤ãã¦è©±ãã¦ãã人ã使ãç¨èªã§ããããªããã®ãçµæ§ãããCSãä½ç³»çã«å¦ã¶éç¨ã§ããããå ±éã§çéã£ã¦ãã¦ããã®ã ãããèªåã«ã¯æãè½ã¡ã¦ããããã®åéã®ç¨èªãæä½éèªåãçè§£ãã¦ä½¿ããããã«ãªãããã
åãã¾ãã¦ãææ¥ãããéçºé¨ã® hogeyama ã§ãã ä»å㯠Haskell ã®ä¸ç´çãªãããã¯ã¨ãã¦ã GHC 9.2 ã§å°å ¥ããã Quick Look 忍è«ã¢ã«ã´ãªãºã ãåãä¸ãããã¨æãã¾ãã æ¦è¦ Haskell ã®ããã¡ã¯ãã¹ã¿ã³ãã¼ããªã³ã³ãã¤ã©ã§ãã GHC ã§ã¯é常ã®å¤ç¸ï¼ã¸ã§ããªã¯ã¹ï¼ã®ä¸è¬åã§ããéå¯è¿°çå¤ç¸(impredicative polymorphism)ãå®è£ ãã¦ãã¾ããããã®åæ¨è«ã¢ã«ã´ãªãºã ã¯é·ããã忍è«ãå¼±ãããå®è£ ãä¸å®å®ã§ã³ã³ãã¤ã©ã®ãã¼ã¸ã§ã³ã¢ããã§ãã°ã¬ãèµ·ãããã¨ãã£ãåé¡ãæ±ãã¦ãã¾ããã ãããæ¨å¹´10æãQuick Look ã¨ããæ°ããã¢ã«ã´ãªãºã ã GHC 9.2 ã«å®è£ ããããã¨ã§ãã®åé¡ã解決ãã¾ããã æ¬è¨äºã§ã¯ãã® Quick Look ã«ãã£ã¦ä½ãå¤ããã®ããå©ç¨ããéã«ä½ã«æ°ãã¤ããã°ããã®ããéå¯è¿°çå¤ç¸ã®æ¦è¦
æè¡æ¸å ¸ã§è³¼å ¥ããæ¬ãã¡ãã£ã¨ä¸æè°ãªPDFãªã¼ãã¼ã§èªãã§ã¿ã¾ãããï¼ Acrobat ReaderããKindleã¨ã¯ã²ã¨å³éã£ãèªæ¸ãå¯è½ã¨ãã¾ãã ããã«ãæ¸ã¿ã½ããï¼Windowsï¼ã https://polymony.net/2020/12/19/post-3765/ ãåç»ãªã©ã https://github.com/polymonyrks/poppyS/blob/master/READMEJP.md èªç¶è¨èªã«ãã·ã³ã¿ãã¯ã¹ãã¤ã©ã¤ãçãªä½ãï¼çè²ï¼ã試ã¿ããã®ã§ãã é£ããææ¸ãèªãæ°ããèµ·ãããªãææ¸ãæ»ç¥ã§ãã¾ãï¼éèªã»ç²¾èªï¼ã æè¡æ¸å ¸10ã«åããã¦ãã«ãæ¸ã¿ã½ãããç¨æã§ãã¾ããã ãã²ããèªèº«ã§ä½é¨ãã¦ã¿ã¦ãã ããã ï¼æ¬æ¸ãè²·ããªãã¦ãã½ããã¯åããã¾ããæ¬æ¸ã«ã¯çè²æ¦ç¥ãæ¸ããã¦ãã¾ãï¼ ãæ±ãå 容ã * èªç¶è¨èªã¸ã®çè²ã«ããè¦èªæ§åä¸ã®å¯è½æ§ * å ·ä½ç
å æ¥ãHaskell çéã§é å»¶è©ä¾¡ã«ãã£ã¦ãããã°ããè¾ãã®ã¯ã©ããªæãã¨è¨ã話ããã£ããè¦ãæããé å»¶è©ä¾¡ã«ãã£ã¦ãããã°ã®ãã«ããã¯ãããªã«å¤ãããªãã¨è¨ãæè¦ãçµæ§ãããå人çã«ã¯è¡æã ã£ããåèªèº«ã¯é å»¶è©ä¾¡ã«ã ãã¶ãã¤ããæºãã¦ã人ãªã®ã§ãã©ãããç¶æ³ã§ããã©ã«ãé å»¶è©ä¾¡ãå«ãã宿ã§ããåé¡ãä½ã£ãããã®åé¡ãè§£ãã°ããã£ã¨ãã¤ããå ±æã§ããã¯ãã£ã¦ãããä¸ç·ã«å°çã«è½ã¡ãããªã ãªããããªã主観ã«å¯ã£ã¦ãã¦ãçµæ§æ¸ãæ®´ã£ã¦ãé¨åãå¤ãã®ã§ãå³å¯ãªè°è«ãããã«ã¯ãã¾ãè¯ãä¾ã§ã¯ãªããããããªããå人çã«ã¯ãåå¿é²çãªæå³åããå¼·ãã¦ãä»ã¾ã§è©°ã¾ã£ããã¤ãã¾ã¨ãã¦ãããã¿ãããªæãã§ãããã å ã«çµè«ãæ¸ãã¦ããã¨ã ããã°ã©ã èªä½ã大ãã㦠[1] è¤éãªå¶å¾¡æ§é ããã¦ã㦠(optional) 以ä¸ã®ããããã®æ¡ä»¶ãæºãã é å»¶è©ä¾¡ãæ©è½ã¨ãã¦ä½¿ã£ã¦ãã ãããã°å¯¾è±¡ãå¹çã«
åå¿è ãå ¥éæ¸ãèªãã§ããæ¸ããã¨ãªã£ãã¨ãã«ã¤ã¾ããã¨ããã®ãã¡ã®ä¸ã¤ãï¼åããããªã©ã¤ãã©ãªãå¤ããåé¡ã§ããï¼ ã¨ãããã¨ã§ããããã©ã¤ãã©ãªã®è©±ããããï¼ ä¾ã«ãã£ã¦ä¾ã®ãã¨ãééã£ã¦ãããã¨æ¸ãã¦ãããããªã®ã§å ±åããããï¼ ã¢ãã夿å Haskellã§å®ç¨çãªããã°ã©ã ãæ¸ãä¸ã§é¿ãã¦éããªããã®ã®ä¸ã¤ã«ã¢ãã夿åãããï¼ããã¤ã¯ãªã«ãã¨ããã¨ï¼ç°¡åã«è¨ãã°ï¼ã¢ãããåæãã¦ã§ããã¢ãããä½ããã¤ã§ããï¼äººéããããã使ãã§ãããã¢ãã夿åã¯ã©ã¤ãã©ãªã§æä¾ãã¦ããã®ã§ï¼ããããçµã¿åããã¦ãæã¿ã®ã¢ãããä½ããã¨ããããã ãï¼ããã«ç«ã¡ã¯ã ããã®ãtransformersã¨mtlã§ããï¼ transformersã¨mtl transformersã¯lift ã¨ããä¸ä½ã®ã¢ããã®ã¢ã¯ã·ã§ã³ãã§ããã¢ããã®ã¢ã¯ã·ã§ã³ã«æã¡ä¸ãã¦ãããã¡ã½ãããå®ç¾©ãããMonadTrans
Haskell ã® IO ã¢ããã£ã¦ï¼ä¸èº«ã©ããªã£ã¦ããã ãã¨æ°ã«ãªã£ã¦ã¦ï¼ã¡ãã£ã¨èª¿ã¹ã¦ã¿ãï¼ãã®ã¡ã¢ï¼ IO ã¢ãã㨠RealWorld ã¾ãã¯åºæ¬ããï¼ IO ã¢ããã¯ï¼ Haskell ã®æ ¹å¹¹ã¨ãªãã¢ããã§ï¼ main ã IO ã§æ¸ãï¼ GHC ã§ã¯ä¸èº«ã¯æ¬¡ã®ããã«å®ç¾©ããã¦ãã [1]: -- In GHC.Types module of ghc-prim package newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #)) è¦ã¦ã®éãï¼ IO a 㯠State# RealWorld -> (# State# RealWorld, a #) ã® newtype ã ï¼ããã¾ãè¦æ £ããªã State# RealWorld ã¨ããå㨠(# , #) ã¨ããåãåºã¦ãããã©ï¼ State# RealWo
2018å¹´11æ10æ¥ãHaskell-jpã主å¬ããã¤ãã³ããHaskell Day 2018ããéå¬ããã¾ãããç´ç²é¢æ°åããã°ã©ãã³ã°è¨èªHaskellããã¼ãã«ãHaskellã«èå³ã®ãã人ããå ¥éè ãã¡ãã£ã¨ã§ãã人ã¾ã§ãæ§ã ãªå±¤ã«åãããã¬ã¼ã³ãã¼ã·ã§ã³ãè¡ã£ãæ¬ã¤ãã³ããå®åããç ç©¶ã¾ã§ãå¹ åºãHaskellã®äºä¾ãå ±æãã¾ãããã¬ã¼ã³ãã¼ã·ã§ã³ãSemigroupã¨ã¯ï¼ãMonoidï¼ãç°ï¼ãã«ç»å£ããã®ã¯ãaiya000æ°ãè¬æ¼è³æã¯ãã¡ã Semigroupã¨ã¯ï¼ãMonoidï¼ãç°ï¼aiya000æ°ï¼ä»¥ä¸ãaiya000ï¼ï¼ãããã¨ç³ãã¾ãã仿¥ã¯ãSemigroupã¨ã¯ï¼ãMonoidï¼ãç°ï¼ãã¨ãããã¼ãã§ä»£æ°ã«ã¤ãã¦ã®çºè¡¨ããã¾ãããããããé¡ããã¾ãã ï¼ä¼å ´ææï¼ æ¨ãVimã¯Neovimã§ããæ´»åã¯TwitterãGitHubãªã©ããã£ã¦ãã¾ãããã®ã¹ã©ã¤
çãããä»äºã§ãããã使ã£ã¦ã¾ããï¼ æ¨ä»ã®ãã¸ãã¹åããã£ãããµã¼ãã¹ã®æ®åã«ããããã£ããããã®ä¸ã§åä½ããããããæ¥åã§æ´»ç¨ãããã¨ã¯ä¸è¬çã«ãªãã¤ã¤ããã¾ãã ç§ãã¡ãæ¥ã ã®ä»äºã«ãããã使ç¨ãã¦ãã¾ãã ã¸ã§ã¼ã¯ã«è¿ããããããªããã®ãããã¯ã¼ã¯ããã¼ã®ä¸é¨ã«ãªã£ã¦ãããã®ã¾ã§ããããã¯ãã¯ãä»äºã«æ¬ ãããªããã¼ã«ã¨ãªã£ã¦ãã¾ãã ãããªãããã®é åã¨ãã¦ãéçºãå°å ¥ãæè»½ãªãã¨ãæããããã¨æãã¾ãã ã¤ã³ã¿ã¼ãããä¸ã§ãå¤ãã®ãããããµã³ãã«ã³ã¼ããå ¬éããã¦ããã®ã§ãã¡ãã£ã¨ãããã®ï¼ä¾ãã°ãè¾æ¸ãé»å代ããã«ãªãã¦ã¼ãã£ãªãã£ãããçï¼ã¯ãããã«ã§ãå°å ¥å¯è½ãªã±ã¼ã¹ãããã§ãããã ãã ããã£ã¨æ¥åã«å¯çãããããã¨ãªãã¨ã社å ã·ã¹ãã ã¨ã®é£æºãã¢ã¯ã»ã¹æ¨©é管ççãåå¥ã®è¦ä»¶ãçºçããããã°ã©ãã³ã°ãå°ãªãããå¿ è¦ã¨ãªãã¾ãã å©ç¨ãããã£ãããµã¼ãã¹ã«ãããã¾ãããæ¬æ ¼
ã¤ã¾ã, RealWorld ãç¶æ ã¨ãã State ã¢ããã®ä¸ç¨®ã§ãã. ããã, ããã¯ç¾å®ä¸çã®ã¢ãã«ã¨ãã¦ã¯ããæå³ å£ãã¦ãã. ãªããªã, GHC 㯠RealWorld åã®å¤ãã¦ã¼ã¶ã«ä¸å触ãããªãããã«ãããã¨ã§ããã°ã©ã å®è¡ã®ç·å½¢æ§ãæ ä¿ãã¦ããããã . ãã触ããã¨ããã, å¤ãã³ãã¼ãããã¨ã§ç¾å®ä¸çã åè£ ãããã, ãªãã£ããã¨ã« ããã, éå»ã«æ»ã£ã¦ ããç´ãããã§ãã¦ãã¾ã. acme-realworld ã¯ãã®ã¢ãã«ã®ããããããã¾ãçªããã¸ã§ã¼ã¯ããã±ã¼ã¸ã§, GHC ã®å é¨é¢æ°ã使ã£ã¦ãããè¡ããããã«ãã6. ç·å½¢æç¸è«ç 両è ã®ããã¨ããåããããã«ã¯ã©ãããã°ããã®ã ããã. è¨èªã®æã¤ããæ§è³ªãä¿ã¡ã¤ã¤, ç¾å®ä¸çã«ãããè¨ç®ã®çºçé åºããã¡ãã¨è¨èªå ã§æ±ãã«ã¯, ãã¯ã, è¨èªã®ã«ãªã¼ãã¯ã¼ãå ã®ä½ç³»èªä½ã«ç¾å®ä¸çãæ±ãè½åãæãããã®
A Tour of Go in Haskell ã¸ããããA Tour of Go in Haskell ã¸ããããã ãã®ãµã¤ãã¯ãGo ã®æåãªãã¥ã¼ããªã¢ã« A Tour of Go ã® ä¸¦è¡æ§ ã®ç« ã Haskell ã§ãã£ã¦ã¿ãã¨ãããã®ã§ãã Haskell 㯠Go ã¨åãã 軽éã¹ã¬ãã ã ãã£ãã« ã¨ãã£ã並è¡å¦çã®æ©è½ãæã£ã¦ãã¾ãã ãã®ãã Haskell ã§ Go ã¨åãå¦çãè¨è¿°ãã¦2ã¤ãè¦æ¯ã¹ã¦ã¿ãã®ã¯è峿·±ããã¨ã§ãããã ããããå§ãã¾ãããã Haskellã«è©³ããæ¹ã¸: ãã®ãµã¤ãã§ã¯ Go ã¨ã®å¯¾æ¯ãåãããããããããããã£ã±ã async, stm ãªã©ã®ããã±ã¼ã¸ã使ã£ã¦ IO ã®ä¸ã§æç¤ºçã«ä¸¦è¡æ§ãæ±ãã¾ãã Evalã¢ãããParã¢ãããªã©ã¯æ±ãã¾ããã ã¾ããHaskell ã¦ã¼ã¶ã§ãªã人ã®åãããããã®ããã«ãæå³çã«ã¦ã¼ãã£ãªãã£é¢
Data.Time.LocalTime ç¾å¨æå»ãåå¾ããå ´åã«ãã®ã¢ã¸ã¥ã¼ã«ã使ãã¾ããç¾å¨æå»ãåå¾ãããããã¨è¨ã£ã¦ getCurrentTime ãå©ç¨ããã¨æ¥æ¬æéã«ãªããªãã®ã§æ³¨æãã¦ãã ããã getZonedTime ã·ã¹ãã ã®ã¿ã¤ã ã¾ã¼ã³ã«å¿ããç¾å¨æå»ãè¿ãã¾ãã > :t getZonedTime getZonedTime :: IO ZonedTime > getZonedTime 2020-06-20 13:18:40.677811323 JST getCurrentTimeZone ã·ã¹ãã ã®ã¿ã¤ã ã¾ã¼ã³ãåå¾ãã¾ãããã®ã¿ã¤ã ã¾ã¼ã³ã«åºã¥ã㦠getZonedTime ãè¨ç®ããã¾ãã > :t getCurrentTimeZone getCurrentTimeZone :: IO TimeZone > getCurrentTimeZone JST zoned
ãªãªã¼ã¹ãé害æ å ±ãªã©ã®ãµã¼ãã¹ã®ãç¥ãã
ææ°ã®äººæ°ã¨ã³ããªã¼ã®é ä¿¡
å¦çãå®è¡ä¸ã§ã
j次ã®ããã¯ãã¼ã¯
kåã®ããã¯ãã¼ã¯
lãã¨ã§èªã
eã³ã¡ã³ãä¸è¦§ãéã
oãã¼ã¸ãéã
{{#tags}}- {{label}}
{{/tags}}