0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Haskell】抽象度を上げれば "文脈" と "コンテナ" は同じ意味っぽい

Posted at

Haskellを勉強していて面白いなと思ったことをメモしておく。

普通の日本語では全然違う言葉

  • コンテナ:箱、入れ物、何かを格納するもの
  • 文脈:状況、背景、前後関係

普通に生活していたら全く別の意味で使う単語。

でもHaskellの抽象世界では同じものを指している

Haskellの型 f a を考えると、これは「型 a が何かに包まれている」状態を表している。

  • Maybe a : 値があるかもしれない or ないかもしれない → "存在有無という文脈"
  • [a] : 複数の値 → "複数性という文脈"
  • Either e a : 成功 or 失敗 → "エラー処理の文脈"
  • IO a : 副作用のある計算 → "外部世界という文脈"

こう見ると、すべて "何らかの状況の中にある a" になっている。

fmapが意味すること

この状態で fmap :: (a -> b) -> f a -> f b を使うと、

  • 普通の関数 (a -> b)
  • 文脈/コンテナの中身 a に適用して、
  • 同じ文脈/コンテナの形のまま b に変換してくれる。

つまり、文脈の中に入った値を安全に変換する仕組み。これを "lifting" と呼んだりもする。

面白いポイント

普通の言葉なら全然違う "文脈" と "コンテナ" が、

Haskellの抽象度の高い世界では、実質的に同じものを指してしまう

というのがすごく面白いと思った。

Haskellが "抽象の楽園" と言われる理由の一端を感じた気がする。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?