我正在为一个类处理一个 Haskell 问题,但我似乎无法获得正确的语法来将项目从自定义类型中拉出。这是类型:
-- Finite State Machine M = (Q, q0, F, d)
type FSM = ([Int], Int, [Int], [(Int,Char,Int)])
这是我一直在使用的测试值:
testFSM :: FSM
testFSM = ( [ 1, 2, 3 ], 1, [ 3 ], [ ( 1, 'a', 2 ), ( 2, 'b', 3 ), ( 1, 'b', 1 ) ] )
我希望能够从 FSM 类型中提取每条数据,但我不太确定我将如何做到这一点。我试过这个:
fsmGetQ fsm = [ q | ( q, q0, f, d ) <- fsm ]
但是如果我使用 testFSM 运行该功能,我会得到:
<interactive>:102:9:
Couldn't match type `([Int], Int, [Int], [(Int, Char, Int)])'
with `[(t0, t10, t20, t30)]'
Expected type: [(t0, t10, t20, t30)]
Actual type: FSM
In the first argument of `fsmGetQ', namely `testFSM'
In the expression: fsmGetQ testFSM
In an equation for `it': it = fsmGetQ testFSM
我有很多用于单个元素的辅助函数,但我不知道如何从 FSM 类型中提取它们。