>>360
レスありがとうございます。

すいません、C++に精通していないため、templateの実体化や宣言の意味がよく分かりません。

件の関数型は次のブログにありました。
Introduction to Singletons (Part 1)
https://blog.jle.im/entry/introduction-to-singletons-1.html#going-backwards
ここの Going backwards の節です。
(昔、別のWebページでも見て、その時も不思議に思っていたのですが、どこのページだったか忘れてしまいました)

そこでは
withSingDSI :: SingDS s -> (SingDSI s => r) -> r
という型です。

確かに SingDSI s => のconstraintを外すと、この関数を呼び出すところで型エラーとなってコンパイルできません。
代わりに、型シグネチャの先頭に SingDSI s => を書いたとしても、です。
しかし、なぜ型が合わないのか理由が分かりません。

何かしらの意味があるはずなのですが・・・