Movatterモバイル変換


[0]ホーム

URL:


趣味はデバッグ……

Control.Arrow.app

Control.Arrow - mzsmsの雑記を読んでArrow というものを理解しようとしてたんだけど、app 関数でちょっとつまずいたのでメモしておく。
loop はあんまりにも分からなかったので後回し。なんとなくフリップフロップ回路に似ている気はした。

型で考えてから図にしてみる

悩んでたコードは先のブログのこのコード。

ghci>let g= id*** (*2)>>> appghci> g ((+10),2)

app の型と、関数インスタンスに限定したときの型と値は、

app:: ArrowApply a=> a (a b c, b) capp:: (a-> b, a)-> bapp (f, a)= f a

id *** (*2) の型は、

id*** (*2):: Num a=> (b, a)-> (b, a)

>>> は、

(>>>):: (a-> b)-> (b-> c)-> a-> c(>>>)= flip (.)

よって id *** (*2) >>> app の型は、

id*** (*2)::         Num a=> (b,      a)-> (b,      a)app::                                         (a-> b, a)-> bid*** (*2)>>> app:: Num a=> (a-> b, a)-> b

破線矢印を関数適用、実線矢印がその結果として図で書くと計算はこんな感じ。

分かると

分かると大したことないな、という感じ。

スポンサー
プライバシーポリシー

本ブログでは、Google Analytics を利用しており、そのため Cookie を使用しています。詳細についてはこちらをご覧ください。

Haskell-jp

引用をストックしました

引用するにはまずログインしてください

引用をストックできませんでした。再度お試しください

限定公開記事のため引用できません。

読者です読者をやめる読者になる読者になる

[8]ページ先頭

©2009-2025 Movatter.jp