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