関係と代数的データ型との相互変換についての妄想 その3
思い付き その2
class QueryUser ? where queryUser :: (?) => Key -> MonadDB User instance QueryUser ? where -- queryUser :: (HasFriends ?) => Key -> MonadDB User query = … instance QueryUser ? where -- queryUser :: (HasName ?) => Key -> MonadDB User query = … userFriends :: (HasFriends ?) => User -> [User] userName :: (HasName ?) => User -> [User]
ふむー?userFriends
と userName
を使った項は、まぁ (HasFriends ?, HasName ?)
になりそうな気はするな。HasFriends ?
の ?
に入る型と対応する値が要る気がする。
ConstraintKinds?
“When matching, GHC takes no account of the context of the instance declaration (context1 etc).” ってあるしムリっぽい。 https://downloads.haskell.org/~ghc/7.0.1/docs/html/users_guide/type-class-extensions.html#instance-overlap
GHC 8.0 だとその記述なくなってるな。 https://downloads.haskell.org/~ghc/8.0.2/docs/html/users_guide/glasgow_exts.html#overlapping-instances
とはいえムリっぽいのは変わりなさそうなんで、次は普通にモナドの方針で行ってみるか。