タグ

ブックマーク / kmizu.hatenablog.com (6)

  • Re: Go にジェネリクスがなくても構わない人たちに対する批判について - kmizuの日記

    先日自分がGoについてつぶやいたものが、id:methaneさんに捕捉されていて、それに対する反論記事 methane.hatenablog.jp があがっていたので、それに対する所感を書いてみました。(2017/09/22 追記):cocoatomoさんから指摘があったのですが、引用元は全て id:methane さんの、上記ブログエントリの文章です。雑多な感想に関して反応しているものではないです。 前置き Goや言語批判に関するスタンスを誤解されると嬉しくないので、最初に書いておきます。 Goの言語仕様はあまり好きではないけど、Goユーザーを見下したり、馬鹿だとかそういう風には思っていない 言語仕様批判とユーザー批判は別の話ですが、しばしばいっしょくたにされて、糞言語Xを使うユーザは糞だ、みたいな主張がされることがあるので、 そういう意図はないという表明です。 Goユーザーの中で、ジェ

    Re: Go にジェネリクスがなくても構わない人たちに対する批判について - kmizuの日記
    ruicc
    ruicc 2017/09/21
    ジェネリクスがプリミティブ型に対応してない問題、そこでGHC8.2から入ったlevity-polymorphic classesですよ
  • 高階多相か高カインド多相、どちらが適切な用語かを考える - kmizuの日記

    タイトルだけだと、わかってる人にしかわからないので、背景を説明します。サンプルコードはScalaですが、同じ機能はHaskellにもあります(あとは、C++のテンプレートテンプレート引数もこれに該当します。もうちょっとマイナーな言語だと他にいくつもありますが、プロダクション環境での事例がある程度ある言語だとこの三つくらいになると思います)。 今回考えたいのは、ある型システムに関して色々な用語が入り乱れているので、どれが適切なのかを検討したいということです。まず、次のようなScalaプログラムの断片を考えます。 trait Functor[F[_]] { def fmap[A, B](f: F[A])(g: A => B): F[B] } ここで、Functor[F[_]]で、パラメタとして渡せるものは、通常の型ではなく、型コンストラクタです。型コンストラクタというのは、何か引数を受け取って

    高階多相か高カインド多相、どちらが適切な用語かを考える - kmizuの日記
    ruicc
    ruicc 2017/05/31
    最近ghcではhigher kind, higher-kinded datatypeなどと呼んでいるように思います。kind polymorphism(PolyKinds)と混乱しないようにするためですかね(知らない)
  • Scalaのメソッドや関数に関するQ&A - kmizuの日記

    Scala勉強会第170回 in 郷 rpscala.doorkeeper.jp は、サブテーマ「Scalaの言語仕様」であったため、久々に熱弁をふるったところ、特に、メソッドや関数の仕様や区別に関して疑問に思った方が多かったらしく、質問も多かったので、Q&A形式でまとめておきます。 Q: (x1, xN) => body 形式と、{ case pat1 => body1; ... case patN => bodyN }形式の違いは何でしょうか? A: 前者は必ずFunctionN[S1,...,SN,R]型を持つのに対して、後者は期待型(expected type)によって型が異なります: 1: FunctionN[S1,...,SN,R]: この場合、 (x1:S1,...,xN:SN) => (x1,...,xN) match { case pat1 => body1 case

    Scalaのメソッドや関数に関するQ&A - kmizuの日記
    ruicc
    ruicc 2016/04/07
  • Scala doesn't Need Generics! (or You can Encode Generics Using Abstract Type Members) - kmizuの日記

    タイトルは煽りではありません。もちろん、Scalaを実用的に使う上では「直接」Genericsを扱えないのは困ります。しかし、記述の冗長ささえ我慢すればGenericsのほぼ全ての機能をAbstract Type Membersによって表現できます。このことを指して、GenericsはAbstract Type Membersでエンコードできると言ったりします。とりあえずコード出せやといわれそうなので、実際のコードを貼りつけてみます。 gist.github.com このコードでは、不変Listと、その上の高階関数mapとforeachをGenericsなしで構築しています。 ポイント: Genericな型 => Abstract Type Memberを持った型 Genericなメソッド => Abstract Type Memberとメソッドを持った型 関数 => Abstract T

    Scala doesn't Need Generics! (or You can Encode Generics Using Abstract Type Members) - kmizuの日記
    ruicc
    ruicc 2016/01/18
    ScalaのサブセットFS, DOTにはGenericsは入ってなくてAbstract Type Membersがある
  • Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド [Kindle版] が発売されるようです - kmizuの日記

    出版社の方から報告があったのですが、紙でしか買えなくて持ち運びに不便という方に朗報です。 www.amazon.co.jp 追記:インプレス様のサイトから、PDF、EPUB形式でも買えるようです @kmizu インプレスからだと各種フォーマットで買えるぽいですね。 http://t.co/vGKSKBfIdi— ssmylh (@ssmylh) April 27, 2015 book.impress.co.jp 追記の追記: @kmizu あれ?発売はまだですよー。30日から配信で、今は予約だけのようです。— Yasuo Nakanishi (@nakanishiyasuo) April 27, 2015 orz ただ、インプレス様のサイトから買えるPDF、EPUB形式は発売済みのようです。

    Scala関数型デザイン&プログラミング―Scalazコントリビューターによる関数型徹底ガイド [Kindle版] が発売されるようです - kmizuの日記
    ruicc
    ruicc 2015/04/27
    pdf, epubで買えるとのこと。素晴らしい。
  • Scala変態技法最速マスター - kmizuの日記

    Java変態文法最速マスターなんてのがかなりブクマされてるみたいだが、変態さならJavaなんてScalaの足元にも及ばないぜ!!ということで、Scala版を書いてみました。しかし、実はあまり変態ではないかもしれません。元ネタと違って、これを読めば何かがわかる、という意味の実用性はあまり無いでしょう。 implicit conversion編 基 Scalaのimplicit conversionは使いようによってはScalaの強力な型システムを台無しにしてしまう力を持っています。たとえば、 implicit def string2int(x: String): Int = Integer.parseInt(x) というimplicit conversionを定義してやると、"300" / 3が100になるなどというキモい挙動を実現することができます。また、さらにカスタマイズして、16進数

    Scala変態技法最速マスター - kmizuの日記
  • 1