Skip to content

Linearity core lint error

From package - text-builder-linear-0.1

src/Data/Text/Builder/Linear/Buffer.hs:133:9: warning:
    Linearity failure in lambda: acc_a1Oh
    'Many ⊈ 'One
    In the RHS of foldlIntoBuffer :: forall a.
                                     (Buffer %1 -> a -> Buffer) -> Buffer %1 -> [a] -> Buffer
    In the body of lambda with binder a_a1Qt :: *
    In the body of lambda with binder f_a1Of :: Buffer
                                                %1 -> a_a1Qt -> Buffer
    In the RHS of go_a1Og :: Buffer %1 -> [a_a1Qt] -> Buffer
    In the body of lambda with binder acc_a1Oh :: Buffer
    Substitution: <InScope = {a_a1Qt}
                   IdSubst   = []
                   TvSubst   = [a1Qt :-> a_a1Qt]
                   CvSubst   = []>
*** Offending Program ***
Rec {
$dEq_a1Ry :: Eq Word
[LclId]
$dEq_a1Ry = $dEq_a1R0

$dEq_a1R0 :: Eq Word
[LclId]
$dEq_a1R0 = $fEqWord

$dNum_a1RA :: Num Word
[LclId]
$dNum_a1RA = $dNum_a1R4

$dNum_a1R4 :: Num Word
[LclId]
$dNum_a1R4 = $fNumWord

$dIntegral_a1RE :: Integral Word
[LclId]
$dIntegral_a1RE = $dIntegral_a1Rc

$dIntegral_a1Rc :: Integral Word
[LclId]
$dIntegral_a1Rc = $fIntegralWord

$dNum_a1RF :: Num Int
[LclId]
$dNum_a1RF = $dNum_a1Rd

$dNum_a1Rd :: Num Int
[LclId]
$dNum_a1Rd = $fNumInt

$trModule :: Module
[LclIdX]
$trModule
  = Module
      (TrNameS "text-builder-linear-0.1-inplace"#)
      (TrNameS "Data.Text.Builder.Linear.Buffer"#)

foldlIntoBuffer
  :: forall a.
     (Buffer %1 -> a -> Buffer) -> Buffer %1 -> [a] -> Buffer
[LclIdX]
foldlIntoBuffer
  = \ (@a_a1Qt) (f_a1Of :: Buffer %1 -> a_a1Qt -> Buffer) ->
      letrec {
        go_a1Og :: Buffer %1 -> [a_a1Qt] -> Buffer
        [LclId]
        go_a1Og
          = \ (acc_a1Oh :: Buffer) (ds_d1Xz :: [a_a1Qt]) ->
              case acc_a1Oh of acc_a1Oh { __DEFAULT ->
              let {
                acc_a1Oi :: Buffer
                [LclId]
                acc_a1Oi = acc_a1Oh } in
              case ds_d1Xz of wild_00 {
                [] -> acc_a1Oh;
                : x_a1Oj xs_a1Ok -> go_a1Og (f_a1Of acc_a1Oi x_a1Oj) xs_a1Ok
              }
              }; } in
      go_a1Og

(…<|) :: Word -> Buffer %1 -> Buffer
[LclIdX]
(…<|)
  = \ (ds_d1XL :: Word) (buf_a1O8 :: Buffer) ->
      let {
        fail_d1XS :: (# #) -> Buffer
        [LclId]
        fail_d1XS
          = \ (ds_d1XT [OS=OneShot] :: (# #)) ->
              case patError
                     @LiftedRep
                     @()
                     "src/Data/Text/Builder/Linear/Buffer.hs:(121,1)-(126,8)|function \\226\\128\\166<|"#
              of wild_00 {
              } } in
      let {
        fail_d1XU :: (# #) -> Buffer
        [LclId]
        fail_d1XU
          = \ (ds_d1XV [OS=OneShot] :: (# #)) ->
              let {
                ds_d1XR :: Int
                [LclId]
                ds_d1XR
                  = fromIntegral @Word @Int $dIntegral_a1Rc $dNum_a1Rd ds_d1XL } in
              let {
                spaces_a1O9 :: Int
                [LclId]
                spaces_a1O9 = ds_d1XR } in
              case ds_d1XR of wild_00 { I# spaces#_a1Oa ->
              let {
                buffer_a1Ob :: Buffer
                [LclId]
                buffer_a1Ob = buf_a1O8 } in
              prependExact
                spaces_a1O9
                (\ (@s_a1Rl) (ds_d1XN :: MArray s_a1Rl) (ds_d1XO :: Int) ->
                   case ds_d1XN of wild_00 { MutableByteArray dst#_a1Oc ->
                   case ds_d1XO of wild_00 { I# dstOff#_a1Od ->
                   (\ (@s_i1Ri) (@a_i1Rj) (ds_d1XP :: STRep s_i1Ri a_i1Rj) ->
                      ST @s_i1Ri @a_i1Rj ds_d1XP)
                     @s_a1Rl
                     @()
                     (\ (s#_a1Oe :: State# s_a1Rl) ->
                        (# setByteArray#
                             @s_a1Rl dst#_a1Oc dstOff#_a1Od spaces#_a1Oa 32# s#_a1Oe,
                           () #))
                   }
                   })
                buffer_a1Ob
              } } in
      case ds_d1XL of wild_00 { W# ds_d1XQ ->
      case ds_d1XQ of ds_d1XQ {
        __DEFAULT -> fail_d1XU (##);
        0## -> buf_a1O8
      }
      }

(|>…) :: Buffer %1 -> Word -> Buffer
[LclIdX]
(|>…)
  = \ (buf_a1O1 :: Buffer) (ds_d1XW :: Word) ->
      let {
        fail_d1Y3 :: (# #) -> Buffer
        [LclId]
        fail_d1Y3
          = \ (ds_d1Y4 [OS=OneShot] :: (# #)) ->
              case patError
                     @LiftedRep
                     @()
                     "src/Data/Text/Builder/Linear/Buffer.hs:(111,1)-(116,8)|function |>\\226\\128\\166"#
              of wild_00 {
              } } in
      let {
        buffer_a1O2 :: Buffer
        [LclId]
        buffer_a1O2 = buf_a1O1 } in
      let {
        fail_d1Y5 :: (# #) -> Buffer
        [LclId]
        fail_d1Y5
          = \ (ds_d1Y6 [OS=OneShot] :: (# #)) ->
              let {
                ds_d1Y2 :: Int
                [LclId]
                ds_d1Y2
                  = fromIntegral @Word @Int $dIntegral_a1RE $dNum_a1RF ds_d1XW } in
              let {
                spaces_a1O3 :: Int
                [LclId]
                spaces_a1O3 = ds_d1Y2 } in
              case ds_d1Y2 of wild_00 { I# spaces#_a1O4 ->
              appendExact
                spaces_a1O3
                (\ (@s_a1RI) (ds_d1XY :: MArray s_a1RI) (ds_d1XZ :: Int) ->
                   case ds_d1XY of wild_00 { MutableByteArray dst#_a1O5 ->
                   case ds_d1XZ of wild_00 { I# dstOff#_a1O6 ->
                   (\ (@s_i1Ri) (@a_i1Rj) (ds_d1Y0 :: STRep s_i1Ri a_i1Rj) ->
                      ST @s_i1Ri @a_i1Rj ds_d1Y0)
                     @s_a1RI
                     @()
                     (\ (s#_a1O7 :: State# s_a1RI) ->
                        (# setByteArray#
                             @s_a1RI dst#_a1O5 dstOff#_a1O6 spaces#_a1O4 32# s#_a1O7,
                           () #))
                   }
                   })
                buffer_a1O2
              } } in
      case ds_d1XW of wild_00 { W# ds_d1Y1 ->
      case ds_d1Y1 of ds_d1Y1 {
        __DEFAULT -> fail_d1Y5 (##);
        0## -> buf_a1O1
      }
      }

(<|#) :: Addr# -> Buffer %1 -> Buffer
[LclIdX]
(<|#)
  = \ (addr#_a1NW :: Addr#) (buffer_a1NX :: Buffer) ->
      letrec {
        srcLen_a1NY :: Int
        [LclId]
        srcLen_a1NY
          = (\ (ds_d1Ya :: Int#) -> I# ds_d1Ya)
              (cstringLength# addr#_a1NW); } in
      prependExact
        srcLen_a1NY
        (\ (@s_a1RV) (dst_a1NZ :: MArray s_a1RV) (dstOff_a1O0 :: Int) ->
           copyFromPointer
             @s_a1RV
             dst_a1NZ
             dstOff_a1O0
             ((\ (@a_i1RY) (ds_d1Y9 :: Addr#) -> Ptr @a_i1RY ds_d1Y9)
                @Word8 addr#_a1NW)
             srcLen_a1NY)
        buffer_a1NX

(|>#) :: Buffer %1 -> Addr# -> Buffer
[LclIdX]
(|>#)
  = \ (buffer_a1Nn :: Buffer) (addr#_a1No :: Addr#) ->
      letrec {
        srcLen_a1Np :: Int
        [LclId]
        srcLen_a1Np
          = (\ (ds_d1Ye :: Int#) -> I# ds_d1Ye)
              (cstringLength# addr#_a1No); } in
      appendExact
        srcLen_a1Np
        (\ (@s_a1S9) (dst_a1NU :: MArray s_a1S9) (dstOff_a1NV :: Int) ->
           copyFromPointer
             @s_a1S9
             dst_a1NU
             dstOff_a1NV
             ((\ (@a_i1RY) (ds_d1Yd :: Addr#) -> Ptr @a_i1RY ds_d1Yd)
                @Word8 addr#_a1No)
             srcLen_a1Np)
        buffer_a1Nn

(<|) :: Text -> Buffer %1 -> Buffer
[LclIdX]
(<|)
  = \ (ds_d1Yf :: Text) (buffer_a1Nk :: Buffer) ->
      case ds_d1Yf of wild_00 { Text bx_d1Yj bx_d1Yk bx_d1Yl ->
      let {
        src_a1Nh :: Array
        [LclId]
        src_a1Nh = ByteArray bx_d1Yj } in
      let {
        srcOff_a1Ni :: Int
        [LclId]
        srcOff_a1Ni = I# bx_d1Yk } in
      let {
        srcLen_a1Nj :: Int
        [LclId]
        srcLen_a1Nj = I# bx_d1Yl } in
      prependExact
        srcLen_a1Nj
        (\ (@s_a1So) (dst_a1Nl :: MArray s_a1So) (dstOff_a1Nm :: Int) ->
           copyI
             @s_a1So srcLen_a1Nj dst_a1Nl dstOff_a1Nm src_a1Nh srcOff_a1Ni)
        buffer_a1Nk
      }

(|>) :: Buffer %1 -> Text -> Buffer
[LclIdX]
(|>)
  = \ (buffer_a1Nb :: Buffer) (ds_d1Yh :: Text) ->
      case ds_d1Yh of wild_00 { Text bx_d1Ym bx_d1Yn bx_d1Yo ->
      let {
        src_a1Nc :: Array
        [LclId]
        src_a1Nc = ByteArray bx_d1Ym } in
      let {
        srcOff_a1Nd :: Int
        [LclId]
        srcOff_a1Nd = I# bx_d1Yn } in
      let {
        srcLen_a1Ne :: Int
        [LclId]
        srcLen_a1Ne = I# bx_d1Yo } in
      appendExact
        srcLen_a1Ne
        (\ (@s_a1Sv) (dst_a1Nf :: MArray s_a1Sv) (dstOff_a1Ng :: Int) ->
           copyI
             @s_a1Sv srcLen_a1Ne dst_a1Nf dstOff_a1Ng src_a1Nc srcOff_a1Nd)
        buffer_a1Nb
      }
end Rec }

*** End of Offense ***


<no location info>: error: 
Compilation had errors
Edited by Matthew Pickering
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information