The key to understanding applicative functors is to figure out what structure they preserve. Regular functors preserve the basic categorical structure: they map objects and morphisms between categories, and they preserve the laws of the category (associativity and identity). But a category may have more structure. For instance, it may allow the definition of mappings that are like morphisms but ta
VSCodeでHaskell Language Serverを使い始める際にドハマリしたので日本語文献を残しておきます。 環境 Windows 10 VSCode 1.38.1 Haskell Language Server 0.0.28 Haskell IDE Engine 0.12.0.0 この記事の続き 起きたこと Haskell IDE Engineをインストールしたのち、VSCodeを起動して拡張機能Haskell Language Serverを導入したところ、エラーも何も出ず動かない。 原因 Haskell IDE Engineがstty.exeを必要としている。 確認方法 コマンドプロンプトで以下の表示が出る: 対策 C:¥Users¥[username]¥AppData¥Local¥Programs¥stack¥x86_64-windows¥msys-[XXX]¥usr¥
この記事の目的 とりあえず、Mac はあまり使ったことがないしターミナルのコマンドもよくわからん、でもとりあえず Haskell 書いてみたい、でもでも入門以前に環境構築でつまづきそう、という、いるのかいないのかわからない読者層をターゲッティングしながら、いずれにしてもあまり難しく考えずやりたいことを短時間でやれるようにこの記事を書きました。(自分の備忘でもあります) この記事は「参考ページ」に示した超有用な記事を超絶大幅に参考にさせていただいております(むしろ、これらの記事を見ながら行った作業の実施記録と言っても過言ではありません)。 背景 今までは Windows で ghci を使っていた 会社から Mac が支給されたので、とりあえず Mac でも Haskell を書いてみたい なにもわからない OS: macOS Mojave バージョン10.14.5 MacBook Pro
ランク2多相の、ふたつの側面 はじめに この記事はhaskell-jpというslack上での、やりとりのなかで、気づいたことをまとめたものです。ランク2多相には、「できることを、ふやす」という側面と「できることを、明示的に制限する」という側面とがあるということに、気づかせてもらいました。とりあえず、いそいで書いたので、読みぐるしい点や、誤りなどあると思います。 ランク2多相の、かんたんな説明 ランク2多相について、かんたんに説明します。以下の記事も参考にしてください。 Higher Rank Type とは ふたつの木の要素の数、または高さを足し合わせる ランク2多相が必要で、なおかつ、かんたんで意味のある例というのは、なかなか思いつきません。すこし作為的ですが、ふたつの木の要素の数を足しあわせる関数と、ふたつの木の高さを足しあわせる関数とを、一般化した関数の例を、みてみましょう。 まず、
最近hmatrixで深層学習を実装する機会があったのですが、hmatrixはベクトルと行列しか提供していないので3階以上のテンソルが必要になって困るという場面に出くわしました。そこで自分で長さ付きベクトルを組み合わせてサクッとn階テンソルが作れると便利かな〜と調べていたら(素直にrepaやmassivを使えという話ではあるのですが )表現可能関手を使うことでn階テンソルとその演算が楽に(そして抽象的に)実装できるという文献1を見つけたので備忘録も兼ねてまとめておこうと思います。 この記事で紹介したコードは以下のGistで公開しています。 https://gist.github.com/lotz84/78474ac9ee307d50376e025093316d0f 関手、つまりFunctorのことですが、表現可能関手はその中でも特別な性質を持つものです。この記事は前半と後半に分けて、前半では
Freer Effectsが、だいたいわかった: 11-8 言語拡張FlexibleContexts - 3要素タプルを型で整列するHaskellghc-extensionsFlexibleContexts Freer Effectsが、だいたいわかった: 11-8 FlexibleContexts拡張 はじめにの前に FlexibleContexts拡張について記事を書くのは、むずかしい。FlexibleContexts単体では、あまり意味のある例題が作れない。MultiParamTypeClasses拡張などによって定義されたクラスを使って、型クラス制約を組み立てるときなどに、Haskell標準での「型クラス制約に許されたかたち」では力不足になる。そこで、FlexibleContexts拡張が必要になる。なので、FlexibleContextsに特化した魅力的な例題というのは作りにくい
6.4 Haskellで理解する 米田の補題の補題を下図の可換図式を用いて説明した。Haskellを用いてさらに理解を深めることとしよう。 Bartosz Milewskiさんが上手に説明しているので、それを借りることにしよう。\({\rm Hom}\)関手を作成しよう。\(Reader\)のデータ型を定めよう。これは、射の集合だ。そこで、ドメインを型変数\(a\)で、コドメイン\(x\)とし、\(a\)から\(x\)への射の集まりと考えると、型構築子を\(Reader\)として、次のように定義できる。 type Reader a x = a -> x \(Reader\)は関手なので、クラス\(Functor\)のインスタンスとするためには、次のようにする。 instance Functor (Reader a) where fmap f g = f . g プログラムは下図を意味する。
この記事はHaskell Advent Calendar 2013の3日目の記事です。 目次 どうして? ファンクタを拡張しよう おさらい 引数をふたつ取ろう 逆転の発想 共変・反変・自由変・固定変 データ型の整理 正の位置と負の位置 自由変と固定変 ファンクタ類を自動生成しよう まとめ おまけ Thornについて CPLであそぼう どうして? ファンクタはHaskellに欠かせないものですが、ファンクタを一般化して見るという見方は意外に広まっていないように感じます。分かってしまえば単純な話だけにもったいないと思ってこの記事を書くことにしました。 また、僕は最近Thornというライブラリを作りました。これは、さまざまなデータ型から関手や畳み込み・展開をTemplate Haskellを使って自動生成するライブラリです。このライブラリを作るなかで気づいたことも合わせて書いていこうと思います。
想定読者と到達目標 圏論に入門しようと定義などを眺めてみたものの それより先に進む方法が分からない人へ向けて。 具体例を通して、抽象的な定義を受け入れつつ、 自分が何を分かっていないか分かるようにする。 大学数学の知識は特に仮定していないつもりなので、 「圏論を理解できないのは○○が分からないからだ」 みたいな自分自身に対する言い訳を排除したい所存。 ひとまず細かいことは気にせず雰囲気を掴んでおいて、 必要の際1に詳細文献を読めるような下地作りが目標。 目次 圏論入門前の準備運動―集合と写像― もう諦めない圏論入門―対象と射― 具体例を通して圏の定義を受け入れる 直積と余直積に触れて圏を理解した気になる もう諦めない圏論入門―圏と関手― 具体例を通して関手の定義を受け入れる Hom 関手に触れて関手を理解した気になる もう諦めない圏論入門―関手と自然変換― 具体例を通して自然変換の定義を受
import Prelude hiding (Monoid(..)) class Monoid s where e :: s (<>) :: s -> s -> s 関手 $T \colon \boldsymbol{C} \longrightarrow \boldsymbol{C}$ に 自然変換 $\mu \colon T \cdot T \Longrightarrow T$ と 自然変換 $\eta \colon \mathrm{id}_{\boldsymbol{C}} \Longrightarrow T$ の情報を加える。 次の2つの条件を満たすとき、 組 $(T,\mu,\eta)$ はモナドである。 (結合律)$\mu \cdot T \ggg \mu = T \cdot \mu \ggg \mu$ が成り立つ。 可換図式とストリング・ダイアグラムでそれぞれ以下のように描ける。
Mostly programming language semantics with a dash of armchair philosophy. The views expressed here are personal and in no way reflect those of my employers. Monads have exerted a curious fascination on programmers who turn to Haskell. The incomprehension of the newbies is matched in intensity only by the smugness of the experts. The official monadic doctrine, as espoused by the Haskell Wiki, is th
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く