TL;DR アドホック多相は型クラスじゃなくても実現できる。 Haskell, Rust, Scalaでは後付けで拡張できるけど、それはアドホック多相の本質ではない。 アドホック多相(Ad hoc polymorphism) ウィキペディアは辞書ではないのはわかっていますが、それでも 英語版WikipediaのAd hoc polymorphismのページを参考に挙げておきます。 ざっくりまとめると 型階層上は関連性のない複数の型の引数に適用できる、多相的な関数 引数の型に応じて、個別の(アドホックな)実装にディスパッチされる と、それだけのこと。 「引数の型によって別の実装にディスパッチされるって、それメソッドのオーバーロードと何が違うの」ってことなんですけど、特に違いはありません。同じです。とはいえ、プログラミング言語によって、実現方法や使い勝手は違います。そのあたりのことを、いくつか
ベン・フィードラーのブログより。 型検査と型推論 型検査とは、あるプログラミング言語で与えられたプログラムを実行し、すべての変数や式が正しい型を持っているかどうかを調べるプロセスです。例えば、文字列は文字列に代入され、算術式は数値のみを使用するなどです。一部の言語では型推論を提供しており、コンパイラに自分で正しい型を見つけるタスクも提供します。言語の特徴に応じて、型検査と型推論の問題は、些細なものから決定不能なものまで様々です。 一般的な用語 完全性 正しく入力されたプログラムを全てチェックできれば、タイプチェッカーは完了です。 健全性 正しく型付けされたプログラムのみを受け付けるものであれば、型検査は健全です。 決定可能性 任意の入力に対して、その入力が問題を満足するかどうかを有限時間で計算できる場合、決定問題は決定可能です。決定可能な問題の例としては、素数判定や充足可能性などがあります
Generalized algebraic datatypes, or simply GADTs, are a generalization of the algebraic data types that you are familiar with. Basically, they allow you to explicitly write down the types of the constructors. In this chapter, you'll learn why this is useful and how to declare your own. We begin with an example of building a simple embedded domain specific language (EDSL) for simple arithmetical ex
Posted on March 3, 2018 authored by Shinya Yamaguchi Last Updated May 2, 2020 はじめに LiquidHaskell を半年ほど勉強した結果、色々と出来ることが増えて楽しくなってきました。 現状、日本語で詳しく説明しているブログ記事等はほとんどありません。 とても面白いツールだと思いますので、色々と紹介していけたらと思います。 今回は LiquidHaskell の導入方法について簡単に説明したいと思います。 LiquidHaskell とは? LiquidHaskell は GHC の型よりも、さらに厳密な 篩型 (Refinement Type) の型検査器です。 既存のコードを変更 (さらには実行すら) することなく利用できるため、既存のプロジェクトの一部にだけ導入することも可能です。 また、つい最近も GA
We now have an official Discord server (invite) - future discussions about the language will most likely happen there, come join! WARNING! This is a research project and a lot of information here might become outdated and misleading without any explanation. Don't use it for anything important just yet! Version 0.5.5 of the language is out! Carp is a programming language designed to work well for i
あいさつ>ω< みなさん、お久しぶりです、月影です>ω< 「いつかブログを書こう」と思っていたら、なんと一週間もたってしまいました(゚д゚)! 「いつか」なんて考えていちゃいけませんね、「今でしょ!」の精神でいかなくちゃです>ω< というわけで、今回はPhantom Typeについてのお話です>ω< Phantom Typeってなんです(・ω・? Phantom Type…、幽霊型… みなさん、ご存知でしょうか(・ω・? わたしは昔に何度かTwitterで見かけたので、名前だけは知っていました(`・ω・´) かっこいい名前だな―って感じです>ω< ファントム・タイプ!!! で、ちょっと面白そうな香りがしたので調べてみましたのです>ω< Phantom Typeさん、名前は仰々しいですが、その実態は非常に単純なものでした>ω< Phantom Typeとはつまり、こういうことです>ω< え(
OCaml では,違う型で再帰する多相関数を書くことが難しい. 以下のデータ型 ('a,'b) twist を考える. type ('a,'b) twist = Nil | Cons of 'a * 'b * ('b,'a) twist 例えば,次の値はデータ型 (int,bool) twist を持っている.let twist_data = Cons(1,true,Cons(false,2,Nil)) このデータ型に対し,長さ(Consの個数)を求める関数を定義してみよう.let rec length = function Nil -> 0 | Cons(a,b,rest) -> 1 + length rest 関数 length の定義は自然のように思えるが,実際には ('a,'a) twist -> int という型が推論されてしまい,上記の twist_data には適用できない.
スタートHaskell 第0回に行ってきました。 「初心者向けで環境構築から始まりハローワールド程度しかやらない勉強会、Haskellに多少触ったことのある人間が行く意味あるのだろうか……」と思いつつ行ってみたものの、予想以上に向こうの想定している「初心者」がハイレベルだったため行く意味大あり、TAPL読んでたのが役に立つくらいの内容だった(初心者の定義とは……)。 実際面白かったので、次回以降もぜひ参加したいですね。 LTの最後にやった、型から項を作る話についての解説 【注意】私はあの発表をした人とは関係ないです。しかも実際素人なので、間違ったことを書いている可能性があります!!【ツッコミ希望】 型から項を作る(@pi8027) 一部の人々のHaskellをストップしそうになったこの発表、実はそれほど難しいことはやっていない―― 正確に言うと、「何のためにやるか」「どうやってやるか」は難
■ [Haskell] The Typeclassopediaを訳しました The Monad.ReaderのIssue 13に掲載されたThe Typeclassopediaという記事が、Functor, Monad, Monoid, Applicative, Foldable, Traversable, Arrowといったような型クラスについて良くまとまっていて、そのあたりを知りたい時の取っ掛かりになりそうだったので翻訳してみました。 作者のBrent Yorgeyさんからも許可がいただけたので公開します。翻訳に慣れていないので変な日本語(特に専門用語の日本語訳はかなり怪しい)があったり、そもそも間違っていたりするかもしれませんので、何か見つけたらコメントを頂けると助かります。 ■ [Haskell] The Typeclassopedia by Brent Yorgey <first
動的型言語の特徴の一つに、配列に色々な型のデータを混ぜられる事があります。いわゆるダックタイピングというやつです。例えば Javascript では ["1", 2, 3.4] のような配列を作る事が出来ます。Haskell のような強い型付けのある言語でこれを実現する方法を勉強したので書きます。 目標として、配列の中にあるデータを文字列として連結する事にします。Javascript で言うと、 append = function (xs) { var result = xs[0]; for (var i = 1; i < xs.length; i++) result += xs[i]; return result; } のような関数 append を作ります。append(["1", 2, 3.4]) の答えは "123.4" になります。 代数データ型を使う Haskell では直接リ
この記事はHaskell Advent Calendar jp 2010 : ATND向けに書いたものです。 最近、ふらふらとネットの波をさまよっていたら、Channel 9でRalf LaemmelさんがHaskellの型クラスを解説する動画を見つけました。これです。 C9 Lectures: Dr. Ralf Lämmel - Advanced Functional Programming - The Expression Problem | Going Deep | Channel 9 C9 Lectures: Dr. Ralf Lämmel - Advanced Functional Programming - Type Classes | Going Deep | Channel 9 The Expression Problemと呼ばれるプログラミングにおける古典的な問題をネタに
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く