package engine type Stack []IsCard func (s Stack) Contains(predicate func(c IsCard) bool) bool { for _, c := range s { if predicate(c) { return true } } return false } func (s Stack) Filter(predicate func(c IsCard) bool) Stack { res := make(Stack, 0, len(s)) for _, c := range s { if predicate(c) { res = append(res, c) } } return res } func (s Stack) Pop() IsCard { if len(s) < 1 { return nil } else { c := s[0] s = s[1:] return c } } func (s Stack) Hidden() Stack { return Secrets(len(s)) }