
I have a class with some functions that have type signatures of the form (RandomGen g) => some parameter types -> RandT g (State [Neuron]) something For example: stimulate :: (RandomGen g) => Int -> [Double] -> RandT g (State [Neuron]) () That "RandT g (State [Neuron])" is my implementation of a "brain", so I'd like to call it that. I tried: data (RandomGen g) => Brain g a = RandT g (State [Neuron]) a But I got this error: `State [Neuron]' is not applied to enough type arguments Expected kind `?', but `State [Neuron]' has kind `* -> *' In the type `State [Neuron]' In the definition of data constructor `RandT' In the data type declaration for `Brain' Do I need higher ranked types or existential types in order to do that? Or am I going about this the wrong way? Thank you in advance, Amy