Закреплённый твит
Koji Miyazato
2.8K posts

Koji Miyazato
@viercc
一応生きてますよ(2019/08) すこし元気になってますよ(2020-) 趣味プログラミング専門エンジニア
沖縄 Присоединился Kasım 2009
355 Подписки232 Подписчики

@Kory__3 多分 do { _ <- ask; m } ~ m みたいな関係式も必要です、でないと`pure` と"1回は`ask`した`Free (Ask e)`"の区別をつけてもよくなってしまいそうなので
日本語

Freer (Ask e) を do { r1 ← ask; r2 ← ask; f r1 r2 } = ask >>= (r → f r r) で「割る」とちゃんと Reader e になるのかな〜、って気はします(今考える余裕は無い)(ならなかったらびっくりする)
りよ@ymdfield
> ask はいつ ask しても同じ値が環境から降ってくるものだが、AskBool.Ask() にはそのような保証は一切ない まあ基本的にはこれが本質だと思ってます
日本語

@Kory__3 このMに対する"bind"は変な型になるのでgraded monadではないかもしれないですが
bind : {a : Set} {g : a -> Free f b} -> M t a -> ((x : a) -> M (g x) b) -> M (t >>= u) b
日本語

@Kory__3 エフェクトの実行
send : (a : Set) -> (t : Free f a) -> M t a
とエフェクトの等式の移行
transfer : equiv t u -> M t a ~ M u a
ができるようなものとして表せたり・・・?
日本語
Koji Miyazato ретвитнул

現在FFLでorganizationとしてGitHub Sponsorsを開こうと思っています.ただメンテナ2人に対してGitHub側で分割する方法がおそらくないことや手数料の問題があるらしいのですが,実情をよく知らないのでOSSへの寄付に詳しい方の意見が聞きたいです.代替としてOpen Collectiveなどを考えています.
SnO₂WMaN@SnO2WMaN
現在のところFormalized Formal Logicは無給の学生2人で開発しており、金銭的な支援を頂けると非常に助かります!ぜひよろしくおねがいします。 #financial-supports" target="_blank" rel="nofollow noopener">github.com/FormalizedForm…
日本語

@ymdfield おっと
関手[Set,Set]→Mon([Set,Set]) ですね
(Set上の自己関手をとって、モナド=Set上の自己関手が合成でなすモノイドを作る関手)
日本語

@ymdfield そういえば、(普通の意味での)集合の圏Setでは関手[Set,Set]→[Set,Set]の意味でのFreeモナドは作れない(※)ので、leanでも似たようなことがあるかもしれないです
日本語

@ymdfield 両辺の濃度を考えると
|T(X)| = |X| + |F(T(X))| = |X| + |B|^|A|^|T(X)|
となり、|B|と|A|が0または1でなければこれは不可能です
日本語

@ymdfield ※ 関手F ∈ [Set, Set]の中には、それが生成するFreeモナドT=Free(F)が存在しないようなものがあります。例えば、A,Bを適当な集合として F(X) :=(X -> A) -> B という関手を考えます。Freeモナドは存在すれば同型を除いて一意なので、
T(X) ~ X + F(T(X))
ですが、
日本語

@ymdfield あっ見切れちゃった
can'tDecompNewtype :: Coercible (Bar_R x) (Bar_R y) => Coercion x y
です
日本語

@ymdfield 一応、newtypeのコンストラクタを隠せばできますよ
Bar_Rは別のモジュールで
type role Bar_R representational
newtype Bar_R a = MkBarR a
と定義してあって、MkBarRはインポートしていない状態です

日本語

@ymdfield まあ、モジュールの境界で型安全性を守っているという状態なら直接unsafeCoerceを使ってもいいような気もしますが・・・
日本語

@ymdfield でもclosed type family `F` が*型コンストラクタを返す*場合、つまり`F (a :: k) :: Type -> Type`のとき、`F a`に対してroleが推論できてもいいような気はしますね。
`F a x`はコンストラクタと中身の型がスコープにない`newtype F_a x = ...`と同じように扱える気がします。
日本語

@ymdfield
Rolesについての論文(最初のものではなくて現時点のGHCに近いもの)を読んでみたんですが、
"decomosition rule"と呼ばれているものがこの"unlift"の性質に近いですね。
#subsection.2.7" target="_blank" rel="nofollow noopener">seas.upenn.edu/~sweirich/pape…
Koji Miyazato@viercc
日本語

@ymdfield In fact, for a `data` with nominal parameter, `Coercion` decomposes to nominal equality `(:~:)`.

English

@ymdfield You can't lift `Coercion` over type families /at all/ unless you can reduce type families (injective or not) to other ordinary `data` or `newtype`.
English

Future directionsではdata familyやtype familyにrole annotationができるように拡張できるかも?と書かれています。これは"decomposition ruleが必須"という事実とどう噛み合うのかはわかりませんが
#subsection.8.4" target="_blank" rel="nofollow noopener">seas.upenn.edu/~sweirich/pape…
日本語





