タグ

haskellに関するtakaya030のブックマーク (6)

  • Scalaも採用した関数型言語の考え方とは何か?その特徴を純粋関数型言語Haskellで学ぶ

    著者:井上 健太 関数型言語とは 関数型言語をはっきり定義することは難しいですが、記事では以下のように考えます。 主に文や命令を組み合わせてプログラムする手続き型言語に対し、主に式や関数を組み合わせて記述するのが関数型言語である。 それでは手続き型言語と関数型言語の違いを比較するために、整数n1とn2の最小公倍数を計算するプログラムを見ていきましょう。 "文"で記述する手続き型言語 まずは手続き型言語であるjavaを見ていきます。 public class GCD { public static void main(String[] args) { final int n1 = 15; final int n2 = 10; int n = n1; int m = n2; int k; System.out.println(n); // n == 15 while (m > 0){ k =

  • All you need is higher kinded types

    This is a literate Haskell-file. You can open it in GHCi by doing the following: curl -O https://las.rs/blog/all-you-need-is-hkt-s.lhs nix develop --impure --expr \ 'with import <nixpkgs> {}; mkShell { buildInputs = [(haskell.packages.ghc924.ghcWithPackages (p: [ p.markdown-unlit ]) )]; }' \ -c ghci -pgmL markdown-unlit all-you-need-is-hkt-s.lhs Haskellers (and even worse, dependent type brained p

  • 直和型の代わりにユニオン型を持つ静的型付け関数型言語 Cotton

    // 割る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年の夏頃から作

    直和型の代わりにユニオン型を持つ静的型付け関数型言語 Cotton
  • 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入門 - とほほのWWW入門

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

  • 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
  • 1