- 誰かが使っている、derivingによるクラス継承が、自分の環境では動かなかった
- 調べ物をしたら、どうも「誰か」は言語拡張を使って、クラス継承を暗黙的にできるようにしているらしかった
- その言語拡張は{-# LANGUAGE GeneralizedNewtypeDeriving #-}とハスケルファイルに書くべきもの(こちら)
- 具体的には、Doubleを読み替えたかった
newtype Prob = Prob { toDouble :: Double}deriving (Show, Eq, Ord, Num, Fractional, Real, RealFrac, Floating)
- NumをDerivingしようとして、ダメ!と言われていた
- 確かに、以下のようなファイルを書いて、ghciで
:l hoge.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
newtype Prob = Prob { toDouble :: Double}deriving (Show, Eq, Ord, Num, Fractional, Real, RealFrac, Floating)
prob :: Double -> Prob
prob x = Prob x
:set -XGeneralizedNewtypeDeriving
- と書く(こちら)
- 結局
- 言語拡張名は "GeneralizedNewtypeDeriving"であって
- "HogeHage"なる名前の言語拡張があったときに
- それをhsファイルにして読み込むときの「言語拡張ですよ」という書式が
{-# LANGUAGE HogeHage #-}
:set -XHogeHage
-
- ということ
- これがわかってみた上で、本家のサイト(こちら)を見ると、確かにその通りに書いてある・・・けれど読み取れなかった・・・