1    type Resource =
2        | t@ Image
3        | ImageName String
4        | t@ VkSampler
5        | ImageSampler Image * VkSampler
6        | ImageNameSampler String * VkSampler
7        | t@ StorageBuffer
8        | t@ UniformBuffer
9    
10       def image : Image = case self of
11            is Image -> self
12            else -> fail
13   
14       def sampler : VkSampler = case self of
15           is VkSampler -> self
16           else -> fail
17   
18       def image_sampler : (Image, VkSampler) = case self of
19           ImageSampler image sampler -> (image, sampler)
20           else -> fail
21   
22       def storage_buffer : StorageBuffer = case self of
23           is StorageBuffer -> self
24           else -> fail
25   
26       def uniform_buffer : UniformBuffer = case self of
27           is UniformBuffer -> self
28           else -> fail
29   
30       def buffer : Buffer = case self of
31           is UniformBuffer -> self
32           is StorageBuffer -> self
33           else -> fail
34