release :: ( Integral a ) => a -> Stream Bool -> Stream Bool -> Stream Bool
release n s0 s1 = always n s1 || foldl1 (||) v0
    where n' = fromIntegral n
          v0 = [ always ( i :: Int ) s1 && drop i s0
               | i <- [ 0 .. n' - 1 ]
               ]
release :: ( Integral a ) => a -> Stream Bool -> Stream Bool -> Stream Bool
release n s0 s1 = always n s1 || foldl1 (||) v0
    where n' = fromIntegral n
          v0 = [ always ( i :: Int ) s1 && drop i s0
               | i <- [ 0 .. n' - 1 ]
               ]
release n s0 s1 = always n s1 || foldl1 (||) v0
    where n' = fromIntegral n
          v0 = [ always ( i :: Int ) s1 && drop i s0
               | i <- [ 0 .. n' - 1 ]
               ]