segmentarrayWrite :: SegmentArray -> UInt -> Segment -> SegmentArray
segmentarrayWrite sa@(SegmentArray mba#) 
                  (W# ix#) 
                  (Segment (Node (I16# x#) (I16# y#) (I16# z#))
                           (Turn (I8# x0#) (I8# x1#) (I8# x2#)
                                 (I8# y0#) (I8# y1#) (I8# y2#)
                                 (I8# z0#) (I8# z1#) (I8# z2#))) = unsafeState# $ \s# -> 
    case writeInt16Array# mba# (ix2Bytes# ix# 0##)  x# s# of { s# ->
    case writeInt16Array# mba# (ix2Bytes# ix# 1##)  y# s# of { s# ->
    case writeInt16Array# mba# (ix2Bytes# ix# 2##)  z# s# of { s# ->
    case writeInt8Array# mba# (ix4Bytes# ix# 6##) x0#  s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 7##) x1#  s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 8##) x2#  s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 9##) y0#  s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 10##) y1# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 11##) y2# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 12##) z0# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 13##) z1# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 14##) z2# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 15##) 0#  s# of { s# -> 
        (# s#, sa #) }}}}}}}}}}}}}

    where
      ix2Bytes# ix# a# = 
          word2Int# ((8## `timesWord#` ix#) `plusWord#` a#)
      ix4Bytes# ix# a# =
          word2Int# ((16## `timesWord#` ix#) `plusWord#` a#)
segmentarrayWrite :: SegmentArray -> UInt -> Segment -> SegmentArray
segmentarrayWrite sa@(SegmentArray mba#) 
                  (W# ix#) 
                  (Segment (Node (I16# x#) (I16# y#) (I16# z#))
                           (Turn (I8# x0#) (I8# x1#) (I8# x2#)
                                 (I8# y0#) (I8# y1#) (I8# y2#)
                                 (I8# z0#) (I8# z1#) (I8# z2#))) = unsafeState# $ \s# -> 
    case writeInt16Array# mba# (ix2Bytes# ix# 0##)  x# s# of { s# ->
    case writeInt16Array# mba# (ix2Bytes# ix# 1##)  y# s# of { s# ->
    case writeInt16Array# mba# (ix2Bytes# ix# 2##)  z# s# of { s# ->
    case writeInt8Array# mba# (ix4Bytes# ix# 6##) x0#  s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 7##) x1#  s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 8##) x2#  s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 9##) y0#  s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 10##) y1# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 11##) y2# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 12##) z0# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 13##) z1# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 14##) z2# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 15##) 0#  s# of { s# -> 
        (# s#, sa #) }}}}}}}}}}}}}

    where
      ix2Bytes# ix# a# = 
          word2Int# ((8## `timesWord#` ix#) `plusWord#` a#)
      ix4Bytes# ix# a# =
          word2Int# ((16## `timesWord#` ix#) `plusWord#` a#)
segmentarrayWrite sa@(SegmentArray mba#) 
                  (W# ix#) 
                  (Segment (Node (I16# x#) (I16# y#) (I16# z#))
                           (Turn (I8# x0#) (I8# x1#) (I8# x2#)
                                 (I8# y0#) (I8# y1#) (I8# y2#)
                                 (I8# z0#) (I8# z1#) (I8# z2#))) = unsafeState# $ \s# -> 
    case writeInt16Array# mba# (ix2Bytes# ix# 0##)  x# s# of { s# ->
    case writeInt16Array# mba# (ix2Bytes# ix# 1##)  y# s# of { s# ->
    case writeInt16Array# mba# (ix2Bytes# ix# 2##)  z# s# of { s# ->
    case writeInt8Array# mba# (ix4Bytes# ix# 6##) x0#  s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 7##) x1#  s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 8##) x2#  s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 9##) y0#  s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 10##) y1# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 11##) y2# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 12##) z0# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 13##) z1# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 14##) z2# s# of { s# -> 
    case writeInt8Array# mba# (ix4Bytes# ix# 15##) 0#  s# of { s# -> 
        (# s#, sa #) }}}}}}}}}}}}}

    where
      ix2Bytes# ix# a# = 
          word2Int# ((8## `timesWord#` ix#) `plusWord#` a#)
      ix4Bytes# ix# a# =
          word2Int# ((16## `timesWord#` ix#) `plusWord#` a#)