タグ

haskellに関するzyzyのブックマーク (32)

  • 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 体験記
    zyzy
    zyzy 2023/10/02
    Haskell界隈がまた面白くなってきてる
  • NeoHaskell

    NeoHaskell is a dialect of Haskell that is focused on newcomer-friendliness and productivity. It is designed to be easy to learn and use, while also being powerful enough to release your app with minimum effort and maximum confidence.

    NeoHaskell
    zyzy
    zyzy 2023/09/27
    普通の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で型レベルパーサー
    zyzy
    zyzy 2023/04/12
    魔境……
  • 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で動的計画法を攻略する
    zyzy
    zyzy 2023/02/16
    競プロに便利な奴だ
  • 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
    zyzy
    zyzy 2023/02/15
    高階型周りがもうちょっとガッツリ入ればなぁ(GATsで大分行ける感じには成った)というのと、演算子の定義をもうちょっと好きにさせてほしいのはずっと思ってるRust。ghcはエラーメッセージよくなったん?
  • JavaScript backend merged into GHC | IOG Engineering

    A new JavaScript backend was merged into GHC on November 30th, 2022! This means that the next release of GHC will be able to emit code that runs in web browsers without requiring any extra tools, enabling Haskell for both front-end and back-end web applications. In this post, we, the GHC DevX team at IOG, describe the challenges we faced bringing GHCJS to GHC, how we overcame those challenges, and

    zyzy
    zyzy 2022/12/21
    元々のreactiveをやってたHaskellがフロントエンドに来た?
  • 代数的データ型と初等代数学

    「関数プログラミングとはなんですか?」と問われたときには「デ,データファースト……(震え声)」と答えることが多いのだが,実際 Haskell や OCaml などの言語を特徴付けるものとして,代数的データ型 (Algebraic Data Type; ADT) の存在は無視できないだろう.その有用性ゆえに,近年では新たな言語の策定の際にその概念が輸出され,RustSwift などの言語にも採用されている. 「代数的データ型とはなんですか?」と問われたときには——問われたことがないのでわからないのだが——おもむろに ghci か utop を立ち上げて,解説を始めるのではないかと思う.ひとしきり解説をした後,「つまり直積の直和なんですよ〜🙌✨」と言って話を締めくくるだろう. int 型や float 型など,「メモリ上の表現」という計算機の気持ちに極めて寄り添ったプリミティヴなデータ

    代数的データ型と初等代数学
    zyzy
    zyzy 2022/07/15
    基本部分の分かり易い説明
  • プログラミング言語Flixに関するMagnus Madsen氏へのインタビュー

    原文(投稿日:2022/02/25)へのリンク Flixは多くのプログラミング言語にインスパイアされたオープンソースのプログラミング言語であり、開発者は関数型、命令型、論理型のスタイルでコードを書くことが可能である。FlixはScalaに似ており、Hindley-Milnerに基づく型システムとGoにインスパイアされた並行処理モデルを採用している。JVM言語はポリモーフィックエフェクトシステムやDatalog制約などのユニークな機能をサポートしている。 FlixのプログラムはJVMバイトコードにコンパイルされ、開発者はFlix Visual Studio Code拡張機能を使用するか、online playgroundを使用して言語を評価することができる。 コミュニティはいくつかの原則に基づいて言語を開発している。例えば、NULL値を使わない、デフォルトでprivate、リフレクションを使

    プログラミング言語Flixに関するMagnus Madsen氏へのインタビュー
    zyzy
    zyzy 2022/03/11
    面白そうだけどあとは公式のエコシステムがどれくらい充実するかかな? Haskellはその辺が厳しかったし、Scalaもsbtはちょっと扱いづらかったし。
  • Haskell: Monadクラスのこれまでとこれから - Qiita

    「return と pure って同じじゃないの?」「Monad クラスの fail って数学的なモナドにはなくない?」 Haskell初心者が引っかかるポイントの一つが、 Monad クラスと Applicative クラスの関係だろう。他にも、 Haskell 2010 の Monad クラスには数学的なモナドと照らし合わせると奇妙な点がいくつかある。 この記事では、近年行われている Monad クラスへの破壊的変更をまとめ、変化の途上にある Monad クラスの理解の一助としたい。 Haskell 2010 での Monad クラスとその問題点 Haskell 2010 Language Report では、 Monad クラスは次のように定義されている: class Monad m where (>>=) :: m a -> (a -> m b) -> m b (>>) :: m

    Haskell: Monadクラスのこれまでとこれから - Qiita
    zyzy
    zyzy 2021/12/20
    haskellやってて気持ち悪い所が知らん間に直されてたらしい
  • 「Haskellのモナド完全に理解した」試験問題

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

    「Haskellのモナド完全に理解した」試験問題
    zyzy
    zyzy 2021/12/19
    guardの話はモナドの理解というよりAlternativeというかMonadPlusの理解と言う気もする。
  • Lensだけで作るニューラルネットワーク

    これは、FOLIO Advent calendar 2021 の15日目の記事です。 圏論を機械学習に応用する話題の一つとしてLensで微分可能プログラミングを実装する話を紹介したいと思います。とはいえ圏論など気にせずLensを使ったニューラルネットワークを実装していきます。学習モデル、誤差関数、学習係数などの基的な構成要素が全てLens(ParaLens)として実装できる様子を楽しんでいただければと思っています。 Lensって何? Lensはいわゆる getter と setter を組み合わせたデータ構造です。すなわち型sのデータ型から型aの値を取り出すgetter s -> a と、型sのデータ型を型aの値で更新して新しい型sのデータ型を作成するsetter (s, a) -> s から成っています。

    Lensだけで作るニューラルネットワーク
    zyzy
    zyzy 2021/12/16
    すげー発想!! Lens自体が色々と出来る可能性秘めてるんだな
  • 関数型プログラミングなんもわからん。を考えようと言うイベントを開きました。

    先日Connpassにて、関数型プログラミングなんもわからん。を考えようと言うイベントを開かせていただきました。 関数型プログラミングがわからない! と言う方達の疑問に対して、普段関数型プログラミング言語を使っているわかる人たちが回答をして行くと言うスタイルのイベントでした。関数型プログラミング言語と一口に行っても、Elm, Scala, Haskell, Clojure, Elixir, F#と様々な言語があり(これは今回参加した人たちの使っている言語で、関数型プログラミング言語の一部にしか過ぎません)何が正解かなどはわからない中での意見の集約といった形のため参考程度にご覧ください。結果イベントとしては様々な視点からの意見が聞けて満足という声が多かったです。私自身知らないことがたくさん知れて勉強になり楽しかったです。 イベントの内容は、Figma上で開けるFigJamファイルとして、公開

    関数型プログラミングなんもわからん。を考えようと言うイベントを開きました。
    zyzy
    zyzy 2021/08/18
    LensがそもそもHaskellでオブジェクト指向っぽい事するためのツール感あるけども、欠けてる所の補完でもあるし、まぁ。
  • Re: 言語のはなし / jmuk - Message Passing

    話をふられてなんなんだけど、最近あんまりML系の言語を使ってみたりしていないんだよな。最後になにかやったのは、min-camlがwasmを吐けるようにしたことで、あれはOCamlで書いたのだったか(min-camlはセルフホストではなく、OCamlで書かれている)。公開もしていない……自分で書いた部分がかなりmessyで気が滅入る感じになってしまったので放置している。 Haskellの型クラス そういえばポッドキャストで最近、Haskellの歴史の論文を読んだのを紹介した。2カラムで50ページ以上という長大なる論文なので仕方なくかなりの部分を割愛したが、なかでも型クラスの話はほとんど触れずに飛ばしたように思う。ところがあの論文は “being lazy with class” という副題がついてるくらい、なにかと型クラスの話をする論文なのだった。論文著者の気持ちとしては、型クラスこそがHa

    Re: 言語のはなし / jmuk - Message Passing
    zyzy
    zyzy 2021/07/11
    やっぱtypescriptが強いのはエコシステム周りのおかげなんだろうなぁ
  • とほほのHaskell入門 - とほほのWWW入門

    「ハスケル」と呼びます。 数学者・論理学者の Haskell Curry の名前に由来しています。 LISP, ML などの言語の影響を受けています。 関数型プログラミング言語 であり、特に 純粋関数型言語 に分類されます。 金融、セキュリティ数学・科学解析、構文解析などの分野での利用例があります。 関数型プログラミングに慣れていない人にとっては、多少学習コストが高いようです。 遅延評価 を採用しており、式は記述されていても必要となるまで評価されません。 関数型言語ですが、モナド などを利用することにより、手続き型言語のような記述も可能です。 Haskell 1.0 (1990年)、Haskell 98 (1999年)、Haskell 2010 (2009年) などのバージョンがあります。 コンパイル型言語ですが、スクリプト言語の様にインタプリタで呼び出すこともできます。 処理系は、イン

    zyzy
    zyzy 2021/01/02
    最近Haskell元気ないので、これで少しでも流行ったらいいな。
  • 経験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を仕事で半年使ってみた
    zyzy
    zyzy 2020/11/18
    文字列の取り回しは本当にいいよね、JVM系列。
  • 『形式意味論入門』を Haskell に書き下す (前編) - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me 一昨年のゴールデンウィークに池袋のジュンク堂を訪れた際,『形式意味論入門』という表題のに目が止まり,数学や論理学を用いて自然言語表現の意味を形式的に考察する学問分野があることを知った*1.また,その道具立てとして単純型付きラムダ計算が用いられていることが,なおのこと私の興味を惹いた.ラムダ計算といえば,読者の多くが計算機科学分野での応用を思い浮かべると思うが,Richard Montague*2 が自然言語分野に応用して以来,そちらの方面でも道具立てとして用いられているようである. 形式意味論入門 (開拓社叢書) 作者:拓郎, 田中開拓社Amazon このは,Irene Heim と Angelika Kratzer による Semantics in Generative Grammar (以下 Heim and

    『形式意味論入門』を Haskell に書き下す (前編) - ryota-ka's blog
    zyzy
    zyzy 2019/08/23
    見慣れた記述形式で読めるのありがたい。
  • HaskellのウェブアプリケーションフレームワークYesodの入門書! 『Haskellで作るWebアプリケーション 遠回りして学ぶYesod入門』発行 技術書典シリーズ、8月の新刊|株式会社インプレスR&D

    HaskellのウェブアプリケーションフレームワークYesodの入門書! 『Haskellで作るWebアプリケーション 遠回りして学ぶYesod入門』発行 技術書典シリーズ、8月の新刊

    HaskellのウェブアプリケーションフレームワークYesodの入門書! 『Haskellで作るWebアプリケーション 遠回りして学ぶYesod入門』発行 技術書典シリーズ、8月の新刊|株式会社インプレスR&D
    zyzy
    zyzy 2018/10/06
    なんだかんだでやっぱYesodがスタンダードの座のままなのかな……? そろそろ手を出すべき?
  • 日持ちする直列化のためのライブラリ「winery」 - モナドとわたしとコモナド

    人類は、酒と共に発展してきたと言っても過言ではない。穀物や果実などを酒に変換することにより、糖を除く栄養を保ったまま、高い保存性を持たせることができる。酒は人々の喉を潤し、時に薬として使われた。 プログラミングにおいても、終了したら消えてしまうデータを、保存性の高いバイト列に変えたい場面がよくある。そのような操作を直列化(シリアライズ)と呼び、いくつかのアプローチが存在する。 コード生成タイプ Protocol Buffers、cap'n'protoなど データの構造を記述する言語(スキーマ)から、データ構造およびシリアライザ・デシリアライザをコードごと生成する。幅広い言語で使える一方、作れる構造が限られており、定義済みの構造にも使えないので、Haskellのような言語とは相性があまりよくない。 互換性を保つ機能が充実していることが多い。 汎用フォーマットタイプ CBOR、MessageP

    日持ちする直列化のためのライブラリ「winery」 - モナドとわたしとコモナド
    zyzy
    zyzy 2018/08/06
    試す機会があったら試してみようかな
  • ContT を使ってコードを綺麗にしよう!

    はじめに Continuation (継続) について全く勉強したことが無いので Control.Monad.Cont で定義されている ContT とかいつ使うんだろうなーと思っていましたが、ついに利用機会がありました!!! 僕が考えたんじゃなくて fumieval さんに相談して、教えてもらったんですけどね。 問題のコード Yesod の Handler ではパラメータの取得するために lookupGetParam や lookupPostParam を利用すると思います。 実際にはこんな感じでパラメータを取得していくつか処理を行います。 deleteTestR :: Handler Html deleteTestR = do mParam <- lookupPostParam "key" case mParam of Nothing -> returnJson $ String "パ

    zyzy
    zyzy 2018/07/03
    lisp系以外での使いどころがイマイチ分からない継続さんだけど、なるほど……。
  • GHC言語拡張の一覧 - Qiita

    Haskellのデファクトスタンダードな処理系であるGHCには,Haskellの言語仕様を補うような形で,GHC拡張と呼ばれる言語拡張を用意している.これらはちょっとした便利な糖衣構文を用意するようなものから型システムに深刻な影響を及ぼすもの,次期仕様策定までの前準備のものまで様々ある.いくつかの拡張はデフォルトで有効になっている. 言語拡張は,次の3つの方法で制御できる. すべての言語オプションは,コマンドラインフラグ-X ...(たとえば,-XTemplateHaskell)でオンになり、フラグ -XNo ...でオフになる.(たとえば,-XNoTemplateHaskell) GHCによって認識されている言語オプションは,LANGUAGEプラグマ(たとえば,{-# LANGUAGE TemplateHaskell #-})を使用して有効にすることもできる. stack (hpack)

    GHC言語拡張の一覧 - Qiita
    zyzy
    zyzy 2018/04/11
    色々あるだろうな、とは思っていたがマジで知らんネタがゴロゴロと……