並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 282件

新着順 人気順

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

  • Inside the Cult of the Haskell Programmer

    A regular column about programming. Because if/when the machines take over, we should at least speak their language. Haskell. It sounded like a good name for a weapon—a well-sharpened blade, like scimitar or katana. The strong German-sounding plosive in its name, as in Nietzsche or Kafka, added a menacing edge. All I really knew about the language was that it was challenging and intended for math

      Inside the Cult of the Haskell Programmer
    • The ultimate guide to Haskell Strings · Hasufell's blog

      © 2021. All rights reserved. Site created with Hakyll. Modified theme lanyon-hakyll based on Lanyon. The ultimate guide to Haskell Strings May 7, 2024, Posted by Julian Ospald This guide is aimed at Haskellers who seek to improve their understanding of String types, be it beginners or seasoned developers. It is also meant to be a quick reference/cheat sheet for deciding which string type to use in

      • CS SYD - Getting your Haskell executable statically linked with Nix

        I have been making my products statically linked over the past few days. This post presents why and how to statically link your Haskell executables and collects a mapping from obscure error to unexpected fixes. This work would not have been possible without the many-year-long effort of people like nh2. This issue on GitHub is a good summary of what went into making this possible. Why statically li

        • 多くのプログラミング言語に危険な脆弱性 ~Windows環境の引数エスケープ処理に不備「Rust」「PHP」「Node.js」「Haskell」などに影響/

            多くのプログラミング言語に危険な脆弱性 ~Windows環境の引数エスケープ処理に不備「Rust」「PHP」「Node.js」「Haskell」などに影響/
          • “バグの出にくい”プログラミング言語「Haskell」「PureScript」の基礎知識

            ダウンロードはこちら 「関数型プログラミング」は、堅牢(けんろう)性や再利用性を高め、よりバグの少ないソースコードの作成を可能にするプログラミング手法を指す。「Haskell」と「PureScript」は、変数の不変性や強力な型システムといった仕組みを通じて、関数型プログラミングの概念を実現するプログラミング言語だ。 本資料は、HaskellとPureScriptの特徴と、両者の使い分け方を解説する。両言語および関数型プログラミングの基礎を学ぶことで、より信頼性の高いプログラムを開発するためのヒントが得られるはずだ。 中身を読むには、「中身を読む」ボタンを押して無料ブックレットをダウンロードしてください。 連載:HaskellとPureScript

              “バグの出にくい”プログラミング言語「Haskell」「PureScript」の基礎知識
            • Calling Haskell from Swift

              struct User { let name: String let age: Int } // birthday(user: User(name: "Anton", age: 33)) = User(name: "Anton", age: 34) func birthday(user: User) -> User { // Calls Haskell function... } To support this workflow, we need a way to convert the User datatype from Haskell to Swift, and vice versa. We are going to serialize (most) inputs and outputs of a function. Even though the serialization as

              • GitHub - augustss/MicroHs: Haskell implemented with combinators

                This repository contains an implementation of an extended subset of Haskell. It uses combinators for the runtime execution. The runtime system has minimal dependencies, and can be compiled even for micro-controllers. The boards/ directory contains some samples, e.g., some sample code for an STM32F407G-DISC1 board. The compiler can compile itself. There are two different ways to compile MicroHs: Us

                  GitHub - augustss/MicroHs: Haskell implemented with combinators
                • AtCoder ガチ言語 Haskell 🔥

                  Haskell で AtCoder に入門しましょう

                    AtCoder ガチ言語 Haskell 🔥
                  • 2023年にHaskell関連で知ってよかったこと - あどけない話

                    これはHaskell Advent Calendar 2023の19番目の記事です。 フォーマッター 以前、フォーマッターをいくつか試しましたが、どれもイマイチでした。しかし、fourmoluはいけてます。fourmoluは、Ormoluのフォークで、Ormoluが偉大なのでしょう。両方試しましたが、僕はformoluに決めました。 Hackageに上がっているので好きな方法でインストールしてください。 % cabal install fourmolu formoluにHaskellのプログラムを渡すと、整形したプログラムを出力してくれます。ファイルの内容を直接書き換えたいときは、-iオプションを渡します。エディタやIDEと連動できますが、お試しでプロジェクト全体を整形するには、以下のようにするといいでしょう。 % find . -name "*.hs" | xargs fourmolu

                      2023年にHaskell関連で知ってよかったこと - あどけない話
                    • 2023年の Linear Haskell で純粋・並列 FFT を実装する──「Haskell は Rust になれるのか?」補遺

                      この記事は Haskell Advent Calendar 2023 14 日目の記事です[1]。 更新履歴 2023-12-15 並列化のパフォーマンスに関する追記。 2023-12-14 初版公開。 はじめに 先々月、Linear Haskell のまとまりのない記事を書いたところ、思ったよりも反響を頂いてびっくりしました。 ただかなりまとまりのない長文だった結果、「長い」「結局 Rust になれるのかようわからん」といった御叱りを頂きました。本当にすいません……。 冒頭に「RustのようになるにはLinear Constraintsに期待」とか、末尾に「2023年のHaskellはまだ Rust ではないが、近い将来 Rust になれる可能性が大きい」とか書きはしましたが、全体があまりにも長いのでこの結論を見つけ出すのも大変ですし、話題があんまり散漫に過ぎまたので論拠もすごくわかりづ

                        2023年の Linear Haskell で純粋・並列 FFT を実装する──「Haskell は Rust になれるのか?」補遺
                      • AI搭載エディタ「Cursor」にHaskellを書かせてみた

                        これは「Haskell Advent Calendar 2023」13日目の記事です。 日頃、私は趣味としてAIをHaskellで実装することに没頭しています。しかし、今回は少し違ったアプローチを試してみようと思います。逆に、AIにHaskellを使って自ら実装させ、その過程や成果を共有してみたいと考えています。この新たな取り組みがどのような結果を生むのか、一緒に探ってみましょう。 AI搭載エディタ「Cursor」 気を取り直して、今回は最近話題のAI搭載エディタ Cursor を使って実際に動くHaskellのアプリを0から作らせてみたいと思います!Cursorをまだ知らない人は以下の記事がオススメです(僕もまだこれしか読んでません🤫) Cursorのダウンロードとインストール、そしてアカウント登録が完了したらさっそくHaskellを書かせてみたいと思います。 それではレッツ・・・ ゴ

                          AI搭載エディタ「Cursor」にHaskellを書かせてみた
                        • TypeScriptでどこまで「関数型プログラミング」するか ─ 「手続き Haskell」から考察する - 一休.com Developers Blog

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

                            TypeScriptでどこまで「関数型プログラミング」するか ─ 「手続き Haskell」から考察する - 一休.com Developers Blog
                          • Haskellのzip関数を一般化すると何になるか

                            この記事は Haskell Advent Calendar 2023 の7日目の記事です。 zip関数について Haskellには zip 関数というものがあります。この関数は、2つのリストを受け取って、それぞれから取り出した要素を組にしたリストを返します。

                              Haskellのzip関数を一般化すると何になるか
                            • 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
                              • Haskellで、手軽にプロパティベーステスト

                                はじめに Haskell Advent Calender 2023の2日めの記事です。カレンダーの枠が空いていたので、久しぶりに勢いで書いてみました。 さて、ラムダノート社から「実践プロパティベーステスト」が出版されたので、巷ではプロパティベーステストが流行っていることでしょう (紹介宣伝です)。 Haskellでは、プロパティベーステスト用のライブラリとして、例えばQuickCheckがあります。 この記事では、Haskellではソースコードのコメント中に簡単な記述をするだけで、プロパティベーステストを手軽に実行できることを改めて紹介します。 本格的なコードを開発している局面だけではなく、ちょっと頭の中を整理したい時などにも手軽で便利です。 (前準備) テストケースと期待値によるテスト Haskellでは、ソースコードのコメント中に埋め込まれたテストケースを実行できるdoctestという

                                  Haskellで、手軽にプロパティベーステスト
                                • Reddit で振り返る今年の英語圏 Haskell 界隈の話題 - Qiita

                                  Haskel advent calendar 2023 の1日めの記事です. お仕事も情報系でなく,多忙を言い訳に数年ほとんどコード自体をかけていなかったのですが,最近 e-Gov 法令検索 で公開されている法令XMLを読みたい需要があって久しぶりに Haskell で書いてみたらやはり書きやすく,とても楽しくて改めて感動しました.書きながら自然に思考が整理される感じがよい. Hoogle は変わらぬ使いやすさでモリモリサポートしてくれるし,環境構築も GHCup などが噛み合って随分スムーズで,Haskell Language Server も成熟してきているようです.環境構築については,昨年の Advent Calendar の1日め @mod_poppo さんの記事 などが参考になります. 最近入った言語拡張にも,ちょっとだけコード書く位でも(大規模なあるいは高度なコードじゃなくても

                                    Reddit で振り返る今年の英語圏 Haskell 界隈の話題 - Qiita
                                  • λm.me - An alternative frontend for Haskell?

                                    In CppCon 2022, Herb Sutter gave a talk titled Can C++ be 10x Simpler & Safer? where he described an alterntive syntax that compiles to C++ (which he calls CppFront or Cpp2) that could remove much of the existing issues with C++ - reduce complexity, increase safety, and more. If you haven't seen it yet, it's worth a watch! With recent events and discussions in the Haskell community, my mind went b

                                      λm.me - An alternative frontend for Haskell?
                                    • unsafePerformIOではじめる愉快なHaskellプログラミング

                                      Haskellは「入出力のためにIOモナドを使う必要があるので難しい」というイメージを持たれがちです[要出典]。この記事ではそのイメージに異を唱えることを目指します。すなわち、モナドを使わずに入出力を含むプログラミングをやってみます。 と言っても、Haskell標準の入出力関数には IO 型がついていることに変わりはありません。ですが、 unsafePerformIO という魔法の関数を使うと、IO 型を外して値を取り出すことができるのです。この記事ではこれを最大限活用します。 module System.IO.Unsafe where -- 魔法の関数 unsafePerformIO :: IO a -> a

                                        unsafePerformIOではじめる愉快なHaskellプログラミング
                                      • 『なっとく!関数型プログラミング』はScalaで説明されている本だけど読んだらHaskellのdoもわかるようになった - nakaoka3の技術ブログ

                                        関数型プログラミング言語については、以前にHaskellの本を読んでみたりして、興味はあったのだが正直あまり理解できてなかった。 『なっとく!関数型プログラミング』はScalaのコードで関数型プログラミングを説明している本だ。最近邦訳が発売されて話題になっていたので買って読んでみた。 www.seshop.com この本で入れ子のflatMap の説明から、Scalaの for 内包表記 を説明しているところを読んで、Haskell の do もこれかということに気がついた。 リストの場合 // 入れ子のflatMap val result = List(1, 2).flatMap { x => List(10, 20).flatMap { y => List(100, 200).map { z => x + y + z } } } // for内包表記 val result2 = for

                                          『なっとく!関数型プログラミング』はScalaで説明されている本だけど読んだらHaskellのdoもわかるようになった - nakaoka3の技術ブログ
                                        • 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 体験記
                                          • Leaving Haskell behind

                                            For almost a complete decade—starting with discovering Haskell in about 2009 and right up until switching to a job where I used primarily Ruby and C++ in about 2019—I would have called myself first and foremost a Haskell programmer. Not necessarily a dogmatic Haskeller! I was—and still am—proudly a polyglot who bounces between languages depending on the needs of the project. However, Haskell was m

                                              Leaving Haskell behind
                                            • Haskellプロジェクトのベストプラクティス

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

                                                Haskellプロジェクトのベストプラクティス
                                              • HaskellとRustを足して2で割ったような関数型言語Fixを作っている話 - Qiita

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

                                                  HaskellとRustを足して2で割ったような関数型言語Fixを作っている話 - Qiita
                                                • 今から関数型プログラミングを学ぶとしたら、ScalaとHaskell、どっちがオススメですか? | mond

                                                  mondでこの質問への回答を読んでみましょう

                                                    今から関数型プログラミングを学ぶとしたら、ScalaとHaskell、どっちがオススメですか? | mond
                                                  • Writing prettier Haskell with Unicode Syntax and Vim

                                                    A short write-up on combining digraphs, a feature built-in to vim, and Haskell's UnicodeSyntax extension, to easily write beautiful Haskell programs with unicode symbols. #haskell#vim 1 Haskell’s Unicode Syntax Extension Haskell (well, GHC Haskell) features an extension called UnicodeSyntax. When enabled, this extension allows the use of certain unicode symbols in place of their corresponding keyw

                                                    • About this book - Learn Haskell by building a blog generator

                                                      About this book Looking for reviews and mentions? Click here. In this book, we will implement a simple static blog generator in Haskell, converting documents written in our own custom markup language to HTML. We will: Implement a tiny HTML printer library Define and parse our own custom markup language Read files and glue things together Add command line arguments parsing Write tests and documenta

                                                        About this book - Learn Haskell by building a blog generator
                                                      • Haskell Optimization Handbook

                                                        Haskell Optimization Handbook¶ by Jeffrey M. Young This book assumes you are using ghc 9.2.x or above and using the Linux operating system. If you are new then the best place to start is the How to use this book chapter. If you are returning then feel free to jump to the Table of Contents and best wishes. It is dangerous to go alone, please take this handbook and good luck! Sincerely, The Contribu

                                                        • Haskellでグラフアルゴリズムを攻略する(WIP)

                                                          はじめに Haskellでは、ListやTreeがよく取り上げられる一方で、グラフの話題はあまり出てこないことがあります。これは、ListやTreeには適切な始代数があり、それに応じたコンストラクタ(パターンマッチング)がうまく機能するためです。しかし、グラフ構造でも実はmatch関数を使ったパターンマッチングで、驚くほど簡潔に各種のアルゴリズムを実装できます。 グラフの基本構造 まず、グラフの基本構造を以下に示します。 import Data.List import Data.IntMap.Strict (IntMap) import qualified Data.IntMap.Strict as IM type Gr a b = IntMap (a, IntMap b) type Node = Int type LNode a = (Node, a) type Edge = (Node

                                                            Haskellでグラフアルゴリズムを攻略する(WIP)
                                                          • 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で型レベルパーサー

                                                              ghc-9.6.1です。 GHCはChar kindが9.2で入ったので型レベルパーサーが書ける様になってるんですよね。ということで書いてみました。 BNFは以下です: expr ::= term *('+' term) term ::= factor *('*' factor) factor ::= '(' expr ')' | nat nat ::= 0 | 1 | 2 | ... | 9 {-# Language TypeData #-} {-# Language DataKinds #-} {-# Language TypeFamilies #-} {-# Language UndecidableInstances #-} {-# Language TypeApplications #-} {-# Language MagicHash #-} {-# LANGUAGE NoStar

                                                                Haskellで型レベルパーサー
                                                              • Haskell入門

                                                                はじめに Haskellは、強い静的型付けを持つ純粋関数型プログラミング言語です。 インストール Haskellの環境は、Haskell PlatformまたはHaskell Stackを使って導入します。 Haskell Platform Haskell Platformをインストールすると、Haskellの処理系(GHC)や周辺ツールを一括で導入することができます。Ubuntuでは、以下のコマンドでHaskell Platformを導入できます。 ただし、この方法で入るHaskell処理系(GHC)はやや古いので、最新のHaskellを使いたい場合は後述するHaskell Stackを導入しましょう。 Haskell Stackのインストール Haskell Stackのインストール手順は次のようになります: apt を使って haskell-stack をインストールする。これによっ

                                                                • 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
                                                                  • Guardian で巨大 Haskell レポジトリの依存関係を正気に保つ

                                                                    TL;DR 巨大なモノレポはパッケージ間の依存関係に気を付けないと、変更が思わぬ所に波及して保守が大変だって? DeepFlow 株式会社製ツール guardian を使って、Haskell モノレポのパッケージ間の依存関係が抽象化や意味論的な境界を侵犯していないかチェックしよう! この度 OSS 化したので、巨大 Haskell モノレポの依存関係管理に困っている皆さんは是非試してみてください。 GitHub Action もあるよ。 はじめに - 巨大モノレポを保守する悲しみ 大量のパッケージから成るモノレポ[1]を管理するのが大変だというのは、あらゆる言語で共通の悩みであろうと思われる[2]。 こうしたモノレポというのは、「CIで全部ビルドできるようにしておく」というだけでは不十分で、ある箇所への変更が必要以上の部分のリビルドを惹き起こさないようにしないと、開発サイクルが全然回らずに

                                                                      Guardian で巨大 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 で Union-Find とクラスカルのアルゴリズム

                                                                        Haskell で、優先度付きキューを使ったダイクストラ法 でダイクストラ法を実装したので、続けて最少全域木問題に取り組んでみようと思います。 最少全域木問題といえばクラスカルのアルゴリズムです。以下に詳しい解説があります。 最小全域木(クラスカル法とUnionFind) - アルゴリズム講習会 そして、確かずいぶん前に一度実装したような記憶が朧気ながらあって、検索してみたところ過去に自分が書いたブログがヒットしその日付は2009年でした。内容については全く覚えていませんでした。 クラスカルのアルゴリズム 気をとりなおしてクラスカルのアルゴリズムですが、このアルゴリズムは直感的には割と簡単というのが面白いところです。 グラフの辺の中から、重みが小さい順に辺を選んでいく。このとき選んだ辺によりグラフに閉路ができるならそれは選ばない。これだけで、最少全域木が構成される。 直感的には簡単ですが、

                                                                          Haskell で Union-Find とクラスカルのアルゴリズム
                                                                        • Haskell で、優先度付きキューを使ったダイクストラ法

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

                                                                            Haskell で、優先度付きキューを使ったダイクストラ法
                                                                          • haskellとnixの話 - Qiita

                                                                            この記事は、Haskell Advent Calendar 2022の23日目の記事です。 だいぶ荒削りですので、間違いがあるかもしれません。 目的 OSSのプロジェクトで4年ほどNixを使い続けてきました。 NixのHaskellのサポートの現状のいいところと課題を整理するのが目的です。 なぜNixを使うのかを確認したあと、NixのHaskellサポートをみて課題をまとめます。 なぜNixか、なにがやりたいのか? Nixはパッケージマネージャーです。各種Linuxディストリビューション, MacOSに入れられるものです。 Nixに期待していることはなんでしょうか? それは再現性と効率性ではないかと思います。 まずは再現性についてです。nixosのポータルの一番はじめにでてくるように再現性がもっとも重要でしょう。 手元の開発環境やクラウドの開発環境、各種のメンバーで開発するソフトウェアのバ

                                                                              haskellとnixの話 - Qiita
                                                                            • 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の型システム(+拡張)を実装して学ぶ

                                                                                導入 Mark P. Jones: Typing Haskell in Haskellという論文があります。この論文は、題通りHaskellでHaskellの型チェッカを実装するというものです。詳細な解説がされており非常にわかりやすく、また型システムの体系的な知識が無くても理解できるように構成されています。 しかしながら、この論文にはソースコードを入力にとって型チェックを行うまでに必要な実装の全ては含まれておらず、プログラムを入力に取って動作させるまでにはいくつかの変換や解析が必要です。Titan Type Checkerは、これら不足している機能(+拡張)を実装し、実際にスタンドアロンに動作する型チェッカを実装したものです。本記事では、論文で解説されていない事柄を中心に振り返りたいと思います。 Typing Haskell in Haskellの動作まで 構文解析 (Parser.hs)

                                                                                  Haskellの型システム(+拡張)を実装して学ぶ
                                                                                • Haskellでちょっとしたスクリプトを書く

                                                                                  Haskellで本格的に開発する際はcabalなりstackなりでプロジェクトを作るわけですが、ファイル一つで済むような(書き捨て)スクリプトをHaskellで書きたい場合があります。 依存関係のないスクリプトであれば、普通にファイルを作って runghc/runhaskell すれば良いでしょう。しかし、Haskellには標準ライブラリー(base)以外にも「準標準」と呼べる外部のライブラリーが多数あり(例:bytestring, text, vector)、それらに明示的に依存することは runghc ではできません。 そこで使えるのが、cabal scriptやstack scriptと呼ばれる機能です。 cabal script cabal run コマンドを使うと、ファイル中に {- cabal: 形式の特殊なコメントを含むHaskellコードをその場でビルドして実行することがで

                                                                                    Haskellでちょっとしたスクリプトを書く