LoginSignup
7
5

More than 5 years have passed since last update.

型に対して後から型クラスのインスタンス宣言を自動導出するには

Posted at

型を定義する際に、 deriving 宣言を用いると、 Show クラスなどの型クラスに対して、
デフォルトの実装を使って自動的にインスタンス宣言を導出してくれて大変便利なのだが、

-- GHCi, version 7.8.3: http://www.haskell.org/ghc/  :? for help
ghci> data Hoge = Hoge Int deriving Show
ghci> :i Hoge
data Hoge = Hoge Int -- Defined at <interactive>:128:1
instance Show Hoge -- Defined at <interactive>:128:31
ghci> Hoge 3
Hoge 3

通常の deriving 宣言は、型定義時にしか使えないので、例えば、外部ライブラリで定義している型など、
手を加える事のできない型に対して、後から Show クラスを追加したい、などという時には、
いちいち自前でインスタンスの実装を記述しなければならず、大変めんどくさい。
そのような時、 GHC 拡張の StandaloneDeriving を使えば、型定義の後から ( もしくは定義ファイルの外部から ) 、 deriving 宣言をしてやることができて便利。

{-# LANGUAGE StandaloneDeriving #-}

module Main where

data Variables = C Char | S String | I Int | Iex Integer | D Double | F Float
data VarList a = Var a [Variables]

deriving instance Show Variables
deriving instance Show a => Show (VarList a)
ghci> S "hello"
S "hello"
ghci> Iex 5
Iex 5
ghci> Var "test" [S "aaa", D 5.2, C 'a']
Var "test" [S "aaa",D 5.2,C 'a']

参考にしたサイト

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5