我有一堂课如下:
class Token a where
symbol :: a -> String
Run Code Online (Sandbox Code Playgroud)
我还希望 的所有实例都有一个返回参数化类型的Token
函数。convert
仅转换就可以正常工作:
class Token a b where
convert :: a -> b
data Egal = One | Two
instance Token Egal Int where
convert One = 111
convert Two = 222
main = print $ show (convert One :: Int)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试同时使用两者时symbol
,convert
我收到了有关歧义的错误。这是我的代码:
class Token a b where
convert :: a -> b
symbol :: a -> String
data Egal = One | Two …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为图表构建数据结构。
以下代码似乎按预期工作:
data NodeRef = NodeRef String Int -- NodeRef name targetIndex
data Node = Node String Node -- Node name targetNode
ref0 = NodeRef "Zero" 1
ref1 = NodeRef "One" 2
ref2 = NodeRef "Two" 0
refs = [ref0, ref1, ref2]
deref :: [NodeRef] -> Node
deref refs = head allNodes
where
deref' (NodeRef name targetIndex) = Node name (allNodes !! targetIndex)
allNodes = map deref' refs
showme :: Node -> Int -> [String]
showme _ 0 = [] …
Run Code Online (Sandbox Code Playgroud)