haskell - 函数依赖、类型族和类型同义词
问题描述
一个具有功能依赖的简单玩具类,
class C a b | a -> b, b -> a where
f :: a -> a
g :: b -> b
将使用类型同义词实例化一次I
type I = Int
instance C I Double where
f = id
g = id
并且曾经与类型同义词J
type J = Int
instance C J Float where
f = id
g = id
GHC 不喜欢这样,它看到了功能依赖冲突。I
并且J
被认为是相同的,即Int
。我可以明白为什么会这样。另一方面,如果 GHC 接受了这一点,我就不会抱怨了。
毫不奇怪,类型族也会发生同样的情况。
我的结论是否正确,唯一的出路是引入包装器,如
newtype I = I Int
newtype J = J Int
或者有没有办法避免包装展开?
解决方案
推荐阅读
- azure - az vm run-command failed
- bluetooth - 支持蓝牙 5 的设备是否同时支持低功耗和经典?
- bash - How to use linux find command to replace special characters in all file names?
- c++ - Reading bitset<0> from istream always a failure?
- c# - Unable to install a Nuget Package in a .NET Framework 4.7.2 project
- flask - Can you run multiple Flask SQLAlchemy queries in parallel?
- docker - Internal Tomcat REST calls to localhost from inside Docker container
- android - 找不到 com.google.android.gms:oss-licenses-plugin:0.9.3
- asp.net-mvc - 如果我在输入字段中有一个静态值,我如何将它传递给控制器?
- javascript - Validate dynamic textbox length