mb1*_*b14 6 haskell type-families
我正在尝试做一个'UnMaybe'类型系列,但它没有编译(实例族冲突).
这是我的代码
{-# LANGUAGE TypeFamilies #-}
type family UnMaybe a :: *
type instance UnMaybe (Maybe a) = a
type instance UnMaybe a = a
Run Code Online (Sandbox Code Playgroud)
错误信息
test.hs:4:16:
Conflicting family instance declarations:
type instance UnMaybe (Maybe a)
-- Defined at test.hs:4:16
type instance UnMaybe a
-- Defined at test.hs:5:15
Run Code Online (Sandbox Code Playgroud)
我理解为什么它不起作用,无论如何还有另一种方法来实现相同的结果(或者激活它的扩展会允许它吗?)
kos*_*kus 11
如果你真的需要这个,你可以使用封闭式系列(至少需要GHC 7.8):
{-# LANGUAGE TypeFamilies #-}
type family UnMaybe a :: * where
UnMaybe (Maybe a) = a
UnMaybe a = a
Run Code Online (Sandbox Code Playgroud)
现在:
GHCi> :kind! UnMaybe (Maybe Int)
UnMaybe (Maybe Int) :: *
= Int
GHCi> :kind! UnMaybe Bool
UnMaybe Bool :: *
= Bool
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |