並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 189件

新着順 人気順

haskellの検索結果1 - 40 件 / 189件

  • とほほのHaskell入門 - とほほのWWW入門

    概要 Haskellとは 関数型言語 純粋関数型言語 インストール Haskell Stack Hello world 基本 予約語 コメント ブロック レイアウト 入出力 型 変数 数値 文字(Char) 文字列(String) エスケープシーケンス リスト([...]) タプル((...)) 演算子 関数 演算子定義 再帰関数 ラムダ式 パターンマッチ ガード条件 関数合成(.) 引数補足(@) 制御構文 do文 let文 if文 case文 where文 import文 ループ データ型 データ型(列挙型) データ型(タプル型) データ型(直和型) 新型定義 (newtype) 型シノニム (type) 型クラス (class) メイビー(Maybe) ファンクタ(Functor) アプリケイティブ(Applicative) モナド(Monad) モジュール (module) 高階関

    • TypeScriptでどこまで「関数型プログラミング」するか ─ 「手続き Haskell」から考察する - 一休.com Developers Blog

      この記事は 一休.comのカレンダー | Advent Calendar 2023 - Qiita 10日目の記事です。 昨今は Web アプリケーション開発の世界でも、関数型プログラミングのエッセンスを取り入れるような機会が増えてきました。 とはいえ、一つのアプリケーションを 1 から 10 までがっちり関数型プログラミングで構成するというわけではなく、そのように書くこともあればそうでない従来からの手続き的スタイルで書くところもあるというのが現状で、どこまで関数型プログラミング的な手法を取り入れるかその塩梅もまちまちだと思います。まだ今はその過渡期という印象も受けます。 本稿ではこの辺りを少々考察してみたいと思います。 先日、Qiita Conference 2023 Autumn で以下のテーマで発表を行いました。 この発表では「関数型プログラミング最強!」という話をしたわけではなく、

        TypeScriptでどこまで「関数型プログラミング」するか ─ 「手続き Haskell」から考察する - 一休.com Developers Blog
      • 「Haskellで人を集めてPHPを書かせる」という都市伝説について | 雑記帳

        Haskell界隈の一部で囁かれる都市伝説として、「Haskellで求人を出して集めた優秀な人材にPHPを書かせる」というものがありました。この都市伝説に実体はあるのでしょうか? 伝説 まず、議論の前提として、この伝説に言及している投稿をいくつか挙げておきます。これは「伝説が少なくとも伝説としては存在する」ことを立証するために挙げるのであり、これらの投稿について何らかの価値判断を行う目的ではありません。 GCPで人を集めてAWS書かせるやつ、Haskell と PHP で見た — mizchi (@mizchi) March 16, 2022 Haskellで募集してPHP書かせる事件だ — デジタル競争の敗者 (@Lugendre) June 18, 2021 Haskell プログラマを募集して PHP 書かせるって,ネタ元どこなんだろう? — ささき しげお (@SigSasaki)

        • 「Haskellのモナド完全に理解した」試験問題

          Haskellは勉強したけどモナドを本当に理解したって言えるのか自信がない… \そんな人向けの試験問題を作りました!/ これから実施する試験問題を、10問中8問正解すればあなたはHaskellのモナドを完全に理解しています。私が保証します! それではさっそく〜〜 第一問 まずは緊張をほぐしましょう。 Haskellの Monad は○○○○である ○○○○に当てはまるのは以下の選択肢のうちどれでしょう? 型 関数 型クラス 型シノニム 答え

            「Haskellのモナド完全に理解した」試験問題
          • HaskellとRustを足して2で割ったような関数型言語Fixを作っている話 - Qiita

            はじめに ここ1年ぐらいかけて、Fixという名前のプログラミング言語を作っています。 コアとなる機能の実装がある程度落ち着き、実際にFixを使ってプログラムを書けるようになってきたので、そろそろ言語の紹介をしてみようと思います。 本記事はFixのチュートリアルではなく、どういう思想で設計されていて、どういう特徴を持つ言語なのか、という点を紹介するものです。 意見・提案・助言などをいただけるとうれしいです。 リポジトリはこちらです。 ※ コメントやコミットメッセージは一応拙い英語で書いていますが、日本語でissueを立てたりdiscordで意見・質問してもらっても大丈夫です。 ※ 急いで作った部分もあるため、コンパイラのコードは結構汚いです。ご容赦ください。 現状、Fixをローカルで実行するためにはLLVMのインストールが必要で時間がかかりますが、Fix playgroundを使えばブラウザ

              HaskellとRustを足して2で割ったような関数型言語Fixを作っている話 - Qiita
            • Rust vs. Haskell

              Rust and Haskell don’t shy away from powerful features. As a result, both languages have steep learning curves when compared with other languages. Trying to learn Rust or Haskell can be frustrating, especially in the first couple of months. But if you already know Rust, you have a head start with Haskell; and vice versa. In this article, we want to show how knowledge of one of these languages can

                Rust vs. Haskell
              • Haskell は Rust になれるのか?──2023年の Linear Haskell 体験記

                追記:いくらなんでもあまりにも長いので、配列演算に焦点を絞ってより「Rustっぽさ」の気持ちを強調した姉妹編を書きました。手っ取り早く雰囲気を掴みたい方はこちらもどうぞ。 TL;DR GHC 9.0 から Haskell に入った線型型(Linear Types)の機能を一部割とガッツリ使ってみたので、Linear Haskell の現在の使い心地と将来の展望を報告するよ。 使おうと思えば使える段階にあるけれど、一部バグもあるし、まだ言語機能面で実装が追い付いていない部分もあって、快適に書けるようになるにはもうちょっと掛かるよ。それでも実用しようと思えばできるレベルにあるよ。 RustのようになるにはLinear Constraintsに期待。 更新履歴 2023/12/15 11:45 姉妹編へのリンク追加。 2023/10/01 12:30 線型性を納得してくれない場合の \eta-展

                  Haskell は Rust になれるのか?──2023年の Linear Haskell 体験記
                • Real World Haskell — Monday Morning Haskell

                  Real World HaskellA lot of people think day-to-day tasks like running a web app are difficult or impossible in Haskell! But of course this isn't true! In our Real World Haskell series, we'll take you through a whole slew of libraries that allow you to write a web backend. These libraries use Haskell's features to approach things like database queries and API building in unique ways. Part 1: Databa

                    Real World Haskell — Monday Morning Haskell
                  • 10年間使ってみて見えたHaskellの闇と光 - Qiita

                    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに わたしがHaskellを使い始めてもうそろそろ10年目になります。(タイトルは多少サバを読んでいますね) これまで使ってきた感想をまとめます。 Haskellのつらいところ まずは愚痴らせてください。 コンパイルが遅い 依存モジュールはすべてソースコードからビルドする必要があります。(バイナリ形式のモジュールはありません) 最初のビルドに20分くらい待つのはザラです。 複雑な型システムをつかうと型推論や型レベル計算に時間がかかります。 高速なHaskellプログラムを書くためには多くの関数をインライン化する必要があります。最適

                      10年間使ってみて見えたHaskellの闇と光 - Qiita
                    • 経験5年のHaskellユーザがScalaを仕事で半年使ってみた

                      haskell-scala-java ちょっと前までScalaを書いていたので、 Haskell好きな人がScalaを書いた感想を書きます。 タイトルは経験15年のOCaml ユーザーが Haskell を仕事で半年使ってみた - camlspotter’s blogの模倣です。 あくまで1ユーザの感想です。 Scalaに慣れてしまうと違和感を忘れてしまうと思ったので、当時箇条書きで雑にメモしていたものを参照して書いています。 逆にScala使いがHaskellを知るメモに役立つかもしれません。 Haskell歴 when: 2013年から知って学び始めましたが、本格的に使い始めたのは2015年からで、5年ほど使っています where: どの言語を使っても良くて新しい言語を学ぶ必要がなければ基本的にHaskellを使っています what: 趣味OSSプロジェクトの大半 現在一番スターもらっ

                        経験5年のHaskellユーザがScalaを仕事で半年使ってみた
                      • 多くのプログラミング言語に危険な脆弱性 ~Windows環境の引数エスケープ処理に不備「Rust」「PHP」「Node.js」「Haskell」などに影響/

                          多くのプログラミング言語に危険な脆弱性 ~Windows環境の引数エスケープ処理に不備「Rust」「PHP」「Node.js」「Haskell」などに影響/
                        • Haskellでゲームボーイエミュレータ - bercriber’s diary

                          Haskell Advent Calendar 2024 3日目の記事です。 TypescriptやZigでゲームボーイエミュレータを書いたことがあったのでHaskellでも試して見ました。CPUまで書いて力尽きたのでゲームは遊べません。自分でゲームボーイエミュレータ書いてみたいという方はgbdev.ioを見ればだいたいなんとなくおおよそたぶんわかるかと思います。 エミュレータはCPUの命令を実行するたびにレジスタやメモリなどを逐次更新していくことになるのでミュータブルの方が効率が良いと思います。素直にIORefやVector.Mutableなどを使うのがよいと思うわけですが、StateMとLensを使えばミュータブルっぽいインターフェイスですっきり書けそうな気がしました。気がしたんです。 type CPU a = StateT CPUState (StateT MBCState (Sta

                            Haskellでゲームボーイエミュレータ - bercriber’s diary
                          • TypeScript の Discriminated Union と Haskell の代数的データ型 - 一休.com Developers Blog

                            この記事は 一休.com Advent Calendar 2024 の15日目の記事です。 予定より早く書き上げてしまったので、フライングですが公開してしまいます。 TypeScript の Discriminated Union (判別可能な Union 型) を使うと、いわゆる「代数的データ型」のユースケースを模倣することができます。一休のような予約システム開発においては「ありえない状態を表現しない」方針で型を宣言するためによく利用されています。 「あり得ない状態を表現しない」という型宣言の方針については以下の URL が参考になります。 Designing with types: Making illegal states unrepresentable | F# for fun and profit このユースケースで Discriminated Union を使う場合、それは文字

                              TypeScript の Discriminated Union と Haskell の代数的データ型 - 一休.com Developers Blog
                            • Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング

                              Competitive programming with Haskell Functional Festival 2025 in TOKYO

                                Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
                              • TS ユーザーが初見の Haskell を写経して型への認識をすこし改めた記録

                                この記事は「レバテック開発部 Advent Calendar 2024」の 1 日目の記事です! TL;DR TypeScript ユーザーが Haskell を写経しながら学んでいった記録です 題材は「JSON Parsing from Scratch in Haskell」で、この記事自体はこれのコードリーディングのメモみたいなものになります うまく言えないのですが、型に対するメンタルモデルが変わった感じがしました 初日から長ったらしい記事を書いてしまったので、早めにまとめが来るような書き方をしました。そこだけでも読んでいただければ🙏 はじめに レバテック開発部でバックエンドエンジニアをしている瀬尾です! テックブログ運営も担当しており、今年はアドベントカレンダーを企画しました〜 その 1 日目として今回の記事を書いています。 バックエンドといえば、関数型スタイルで書くと型システムを

                                  TS ユーザーが初見の Haskell を写経して型への認識をすこし改めた記録
                                • Haskell に IDE はないのか?──独断と偏見による Haskell の IDE 十年史

                                  答え:Haskell に IDE はずっとある、今ならHLS使え(内容を読む気がないようという人向けの答え) はじめに 2021年2月現在、Haskell の IDE 環境は Haskell Language Server (HLS) の登場により劇的な進化を遂げていますが、日本の Haskell コミュニティではその前身の Haskell IDE Engine (HIE) の情報がまだ氾濫しており、十分な周知に至っていない現状があります。 本稿では、こうした現状を打破すべく、2021 年 2 月現在の Haskell の IDE 環境を取り巻く現状と、そこに至るまでの歴史を完全に独断と偏見で紹介します。より多くの人に HLS の存在を周知し、皆さんの Haskell Life の一助となれば幸いです。また、HLS の前身である HIE は必ずしも快適に動作するとは言い難かったため、HLS

                                    Haskell に IDE はないのか?──独断と偏見による Haskell の IDE 十年史
                                  • ソースコード生成AI「AI Programmer」が対応言語を拡充、正規表現や日本語解説にも対応/PHP、Go、Haskell、Lisp、C#などを新たに習得

                                      ソースコード生成AI「AI Programmer」が対応言語を拡充、正規表現や日本語解説にも対応/PHP、Go、Haskell、Lisp、C#などを新たに習得
                                    • AtCoder ガチ言語 Haskell 🔥

                                      Haskell で AtCoder に入門しましょう

                                        AtCoder ガチ言語 Haskell 🔥
                                      • 「アルゴ式」をHaskellで学ぶための準備

                                        この記事は、CAMPHOR- Advent Calendar 2021 の7日目の記事です。 「アルゴ式」というプログラミングを学んで実践できる非常に良質なWebサービスがあります。 アルゴリズムについて解説された教科書だけでなく、実際にプログラミングを書いて提出してオンラインでジャッジしてくれるシステムを備えた練習問題も用意されているのが特徴です。さらにこのオンラインジャッジシステムは多くのプログラミング言語に対応しており、その中にはHaskellも含まれています。 今回はこのアルゴ式を読むにあたって練習問題をHaskellで解くために必要になりそうな知識についてまとめました。アルゴ式は現在ベータ版なので将来的な変更で変わってしまうものもあるかもしれませんが、2021年12月現在の練習問題を全てHaskellで解いた上で必要になったものをまとめているので参考にしていただけると幸いです。

                                          「アルゴ式」をHaskellで学ぶための準備
                                        • Haskellでの型レベルプログラミング

                                          Haskellでの型レベルプログラミングの解説書です。

                                            Haskellでの型レベルプログラミング
                                          • 仕事で使うHaskell

                                            TL;DR Haskellはいいぞ。ただ仕事で使うならビルド、デプロイ周辺は工夫する必要が色々出てくるぞ。 あ、nixもいいぞ。 はじめに Haskellを用いている会社HERPに転職してからそろそろ1年が経つので久しぶりに記事でも書いてみます。そういえばzennでは初投稿ですね。 最近はHERPでHaskellを書きつつシステム基盤整備みたいなことをやっています。あとマネージメントみたいなこともやってたりします。 僕の書いたHaskell microserviceは既に稼働して売り上げに貢献しています。 あ、HERPはHaskell FoundationのFunctorスポンサーになっています。スポンサーの名前が面白いですよね。 Haskellを仕事で使う感想 最高ですね。簡単便利十分速い保守楽拡張楽、という感じです。 並行プログラミングツールとしてstmが提供されているのがお気に入りで

                                              仕事で使うHaskell
                                            • Haskellの子供たち

                                              Owenのブログより。 もし、私が4年前にタイムスリップして、昔の自分にHaskellが輝きを失い始めていると言ったら、私はそれを信じないでしょう。私はHaskellで育ち、カテゴリ理論への欲求はHaskellによって刺激され、私の最大のプログラミング・プロジェクトはHaskellであり、Haskellを使った会社で働くのが夢でした。 しかし今では、以前ほどHaskellに興奮していないことに気が付きました。何が変わったのでしょうか? いくつか要因があると思います。主な要因の1つは、Haskellが本当に得意としているプログラミングの種類だと思います。つまり、抽象的で正しいインタフェースを作ることは、私にとって興味のあるタイプのプログラミングではないと言うことです。キャリアとしてソフトウェアに携わりたいと思ったとき、自分を繰り返さないようにする素晴らしい機能を持った言語はとても役に立ちまし

                                              • 『形式意味論入門』を Haskell に書き下す (後編) - ryota-ka's blog

                                                この記事は以下のページに移転しました. blog.ryota-ka.me 前編はこちら ryota-ka.hatenablog.com §8 発話文脈・変項割当 という文を発話したとする.この文は,代名詞 と の2つの指示対象が発話の状況から明らかなときにのみ適切である.このように,文脈に依存して意味が初めて定まる言語表現を直示 (deixis) という.指示対象を明らかにするため,次のように代名詞に指標 (index) を振ることにする. と に と という異なる指標が割り当てられているのは,それらが相異なる外延をもつことを表している. 既に述べたように,この文の外延は および の指示対象が文脈から定まることで初めて計算することができる.このような文は自由変項*1を含んだ開いた項 (open term) として見做すことができる.このような発話に際しての状況を utterance con

                                                  『形式意味論入門』を Haskell に書き下す (後編) - ryota-ka's blog
                                                • 執筆中:「Haskellでの型レベルプログラミング」 | 雑記帳

                                                  最近、「Haskellでの型レベルプログラミング」という「本」を執筆している。まだ完成ではないが、以下のリンクから読める: Haskellでの型レベルプログラミング なぜHaskellか 最近いろんな言語が出てきている中で、Haskellの強みとは何だろうか。人によって答えは色々あるだろうが、筆者にとってHaskellの魅力的な側面は強力な型システムである。どのくらい強力かというと、型レベルでプログラミングができ、依存型の模倣さえもできてしまう。 (依存型をやりたいなら最初から依存型のある言語を使えという意見は尤もだが、それはそれとして。) Haskellでの型レベルプログラミングの解説記事というのは、英語圏ではちらほら見かけるが、日本語圏ではあまり見ない。2018年(原文は2017年)に公開された Haskellにおける型レベルプログラミングの基本(翻訳) – Qiita が数少ない例で

                                                  • 永続データプログラミングと競技プログラミング 〜 Haskell でがんばる競プロ

                                                    この記事は Haskell - Qiita Advent Calendar 2024 - Qiita の 5日目の記事です。 純粋関数型言語の Haskell では、値は基本的に不変です。リスト、Set、Map など基本的なデータ構造も不変データ構造として提供されています。 不変なデータ構造は変更をしても、変更前の値が残ります。結果、データを変更したあとも以前のデータを参照することができるという特性が得られます。この特性を指して、不変なデータのことを「永続データ」と呼び、永続データを駆使して問題を解くことを「永続データプログラミング」と呼ぶことがあります。 Haskell で関数型プログラミングをすると、自然と永続データプログラミングを実践することになります。 永続データプログラミングを支えるのが「永続データ構造」の存在です。 不変なデータで変更を表現するには、元のデータをコピーして、それ

                                                      永続データプログラミングと競技プログラミング 〜 Haskell でがんばる競プロ
                                                    • Haskellで動的計画法を攻略する

                                                      Haskellで動的計画法を実装する2つの方法 出典: Easily Solving Dynamic Programming Problems in Haskell by Memoization of Hylomorphisms ザ圏論的やり方としては①Dynamorphism、手続き的な方法として②STモナドが挙げられる。 DynamorphismはHylomorphismをメモ化したようなもので、詳しくはlotz氏のサイトを参照してほしい。 Haskellerとしては、Dynamorphismはとても憧れる手法である。しかし、思ったよりも速度が出ない。。 このスクラップに二通りのLCSの解法を記載したが、いずれもTLEであった。 lotz氏によると、メモ化されたデータ構造にはO(n)でしかアクセスできないことが理由とのこと。 この記事では、STモナドによるメモ化再帰を用いた動的計画問題

                                                        Haskellで動的計画法を攻略する
                                                      • Haskellプロジェクトのベストプラクティス

                                                        Haskellプロジェクトの「良い習慣」と考えられるやつをまとめてみます。あくまで私の個人的な意見です。 プロジェクト固有のPrelude Prelude に相当するモジュールをプロジェクト独自に持っておくと便利ではないか、という話をします。代替Preludeの話ではありません。 プロジェクト固有のPreludeがあると便利な理由 理由の一つは、標準 Prelude の変化です。直近では次のような変化がありました: GHC 9.4: ~ 型演算子が追加(これまでは構文だった) GHC 9.6: liftA2 が追加 GHC 9.10(見込み): foldl' が追加 もっと昔に遡ると、Semigroup((<>)) が増えるやつなどがありました。 この帰結として、 新しいGHCで名前の衝突が起きやすくなる 新しいGHCで「冗長なインポート」の警告が出やすくなる ことが言えます。これらの問題

                                                          Haskellプロジェクトのベストプラクティス
                                                        • Algorithm Design with Haskellでアルゴリズムを学ぶ - 朝日ネット 技術者ブログ

                                                          はじめに 開発部のcbmkageです。 仕事でプログラムを書いていると、どうしたら期待通りに、かつ高速に動作するアルゴリズムが実装できるか、考えることがあります。 本記事では、アルゴリズムについて新たな視点を与えてくれる本「Algorithm Design with Haskell」を紹介します。 本記事はHaskell中級者向けです。Haskellの文法や、代表的なリスト操作関数を知っていることを前提としています。 はじめに Algorithm Design with Haskellとは 準備: 関数の同値関係 貪欲アルゴリズムのPART紹介 貪欲アルゴリズムとは 候補の生成と選択 貪欲アルゴリズムへの改善 まとめ 採用情報 Algorithm Design with Haskellとは Algorithm Design with Haskell 作者:Bird, Richard,Gib

                                                            Algorithm Design with Haskellでアルゴリズムを学ぶ - 朝日ネット 技術者ブログ
                                                          • フロントエンドエンジニアのためのHaskell入門 | ダーシノ(@bc_rikko)

                                                            フロントエンドエンジニアのためのHaskell入門 JavaScriptのなんちゃって関数型プログラミングではなく、純粋な関数型プログラミングのエッセンスを学びたくてHaskellを選んだ。しかし、過去3回入門したが3回破門されたので、今度こそ免許皆伝したい。 普段はTypeScriptで開発を行っているので、Haskellと比較しながら学んでいきたい。 基本構文 変数の宣言 const x: number = 10 x :: Int x = 10 関数の宣言 function add(x: number, y: number): number { return x + y } add :: Int -> Int -> Int add x y = x + y アロー関数 const add = (x: number, y: number): number => x + y add :: I

                                                              フロントエンドエンジニアのためのHaskell入門 | ダーシノ(@bc_rikko)
                                                            • Haskell: The Craft of Functional Programming (PDF)

                                                              I’m happy to announce that the PDF of Haskell, The Craft of Functional Programming (3rd edition) is available to view and download for free. Later in the year I’ll revise it and make it available as an online text. But for now, here it is, uncorrected: https://simonjohnthompson.github.io/craft3e/craft3e.pdf

                                                                Haskell: The Craft of Functional Programming (PDF)
                                                              • 関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ | ドクセル

                                                                「楽しく楽にcoolにsmartに」を理想とするprogrammer/philosopher/liberalist/realist。 好きな言語はClojure, Haskell, Elixir, English, français, русский。 読書、プログラミング、語学、法学、数学が大好き! イルカと海も大好き🐬

                                                                  関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ | ドクセル
                                                                • 新しいHaskellベースのWeb App Specification Languageがアルファ版でリリースされた

                                                                  Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。この本では、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

                                                                    新しいHaskellベースのWeb App Specification Languageがアルファ版でリリースされた
                                                                  • Haskellの環境構築2023

                                                                    この記事はHaskell Advent Calendar 2022の1日目の記事です。 この記事では、2022年12月時点のHaskellの環境構築手順を紹介します。2023年になっても通用するといいなあ。 対象とする環境 対象とする環境は以下の通りです: Unix系 macOS (Intel / Apple Silicon) Linux (x86_64 / aarch64) WSL2を含む(WSL1は不具合があった気がするので避けてください) Windows (x64) Arm系CPU搭載のコンピューターを使っている場合は、別途LLVMが必要になる場合があります。以下に当てはまる場合は、「補遺:LLVMバックエンドを使う」も読んでください: 64ビットArm(Apple Silicon Macや、Raspberry Pi OSの64ビット版など)で、GHC 9.0またはそれ以前のバージョ

                                                                      Haskellの環境構築2023
                                                                    • HaskellでのTDDを楽しくするライブラリ methodを作りました。

                                                                      はじめに Haskellでテスト駆動開発を行う際、純粋な関数は単体テストを書きやすいですが、 返り値がモナドの関数(この記事ではそのような関数をメソッドと呼びます)にたいして単体テストを書くのは簡単ではありません。 今回、メソッドに対して単体テストを書きやすくなるライブラリ methodを作成しました。 methodとは methodでは a1 -> ... -> an -> m b型の関数のことをメソッドと呼びます。 ここでmはモナドです。(->) rモナドを除く大抵のモナドはサポートしていますが、独自のモナドをメソッドにするにはMethod型クラスを実装する必要があります。 モックの作成 methodでは任意のメソッドのモックをDSLで書くことができます。 import Test.Method import RIO (throwString) f,f' :: Int -> String

                                                                        HaskellでのTDDを楽しくするライブラリ methodを作りました。
                                                                      • Haskell で、優先度付きキューを使ったダイクストラ法

                                                                        Haskellのカレンダー | Advent Calendar 2022 - Qiita に参加させていただきます! 突然ですが Haskell でダイクストラ法を実装します。 ダイクストラ法は重み付きグラフで最短経路問題を解くアルゴリズムのひとつです。ダイクストラ法 - Wikipedia に詳しい解説があります。 ダイクストラ法は、重み付きグラフにおいて、その重みに負の値がない・・・つまり重みが正であることを前提にしています。この構造上の仮定によって、貪欲的手法を取ることができるのがその特徴で、結果ベルマン・フォード法などの汎用的なアルゴリズムよりも計算量的に有利になります。 ダイクストラ法では、始点から各頂点への到達コストを最初に \infty と置いて、そこから緩和操作によって徐々にそれらを最適コストまで収束させていくわけですが、このとき グラフの頂点集合からその時点で最小のコスト

                                                                          Haskell で、優先度付きキューを使ったダイクストラ法
                                                                        • 「Haskellは純粋関数型言語だから副作用がない」っていうの、そろそろ止めにしませんか? (1)

                                                                          1. 「Haskellは純粋関数型言語だから副作用がない」っていうの、そろそろ止めにしませんか? 2. はじめまして! 👋😄 3. 🇯🇵自己紹介 + 宣伝 1: 4. 🔰自己紹介 + 宣伝 2: 5. 📝今日話すこと 6. ⚠️おことわり 7. どうして「純粋」なのか 8. Haskell が生まれた背景 9. Haskell 以前の IO 10. Haskell 1.0 - 1.2 の IO (1) 11. Haskell 1.0 - 1.2 の IO (2) 12. Haskell 1.0 - 1.2 の IO (3) 13. Haskell 1.0 - 1.2 の IO (4) 14. Haskell 1.0 - 1.2 の IO (5) 15. Haskell 1.0 - 1.2 の IO (6) 16. Haskell 1.0 - 1.2 の IO (7) 17. H

                                                                          • 技術書を自作PDFリーダーで読む - Haskellでつくる不思議な読書体験 (1):関数型玩具製作所

                                                                            技術書典で購入した本をちょっと不思議なPDFリーダーで読んでみませんか? Acrobat Readerや、Kindleとはひと味違った読書を可能とします。 【ビルド済みソフト(Windows)】 https://polymony.net/2020/12/19/post-3765/ 【動画など】 https://github.com/polymonyrks/poppyS/blob/master/READMEJP.md 自然言語にもシンタックスハイライト的な何か(着色)を試みるものです。 難しい文書、読む気すら起こらない文書を攻略できます(速読・精読)。 技術書典10に合わせてビルド済みソフトを用意できました。 ぜひ、ご自身で体験してみてください。 (本書を買わなくてもソフトは動かせます、本書には着色戦略が書かれています) 【扱う内容】 * 自然言語への着色による視認性向上の可能性 * 具体的

                                                                              技術書を自作PDFリーダーで読む - Haskellでつくる不思議な読書体験 (1):関数型玩具製作所
                                                                            • HaskellのLinearTypes言語拡張について少し調べた - TSUGULOG

                                                                              最近リリースされた GHC 9.0.1 で使えるようになった LinearTypes 言語拡張について気になったので調べた。 LinearTypes言語拡張とは GHC9.0.1から使えるようになった言語拡張で、Linear Typeを導入できる。ただ、上記リリースノートに “a first cut” とある通り、まだ実験的な機能としてリリースされた段階のようだ。 通常のGHCの言語拡張のように とすることで使えるようになる Linear Typeとは そもそもLinear Typeとはどのような概念なのか、簡単に説明すると、「関数の引数がちょうど1度だけ評価される」、という条件を指定できるもののようだ。 理論的な基礎となるLinear type systemsについては前から広く知られていたものの、なかなか実装までは至らず、今回Haskellで晴れて実装までこぎつけたとのことだった。 具

                                                                                HaskellのLinearTypes言語拡張について少し調べた - TSUGULOG
                                                                              • NixによるHaskell開発環境の構築 - syocy’s diary

                                                                                Nix package manager によって Haskell のスクリプティングおよびパッケージ開発の環境構築をしていく。 こいついつも環境構築してんな ここで触れられないこと Nix スクリプティング ちゃんとした開発 haskell-language-server の導入 パッケージの設定 高度な依存関係オーバーライド トラブルシューティング nix-shell の立ち上がりが遅い cabal run で cabal 自体の出力を無視したい Mac で nix-env -i が失敗する Mac で channel が消滅する こいついつも環境構築してんな 環境構築以外はブログに書くような一般性のあることをやっていないということで……。 ここで触れられないこと cabal.project によるマルチプロジェクトを扱う方法 外部の nix store を使うこと nix の新しいコマ

                                                                                  NixによるHaskell開発環境の構築 - syocy’s diary
                                                                                • Haskell の Array

                                                                                  Haskellのカレンダー | Advent Calendar 2023 - Qiita 3日目の記事です。 Haskell の Array (配列) について書こうと思います。Haskell の Array は索引が型クラスの Ix で抽象化されているため、特に配列の次元を拡張する際に柔軟性がありとても便利です。 そんな便利な Array ですが、もともと Haskell はリスト操作が強力ということもあってか、既存の参考書をみても Array の解説はほんの少しにとどまっているか、解説がないことがほとんどです。 Array が必要になる場面の多くは「リストだと !! によるインデックスアクセスで O(n) になってしまい間に合わない」という場面が多いと思います。しかし Haskell にはインデックスアクセスが O(1) の Vector (vector: Efficient Arra

                                                                                    Haskell の Array