53949


なぜ PureScript の Data.Array.ST の `STArray` には `length` がないのですか？

現状は↓のように `unsafeFreeze` で `STArray` を `Array` にしたあと `Array` の `length`
で取得しています。

[code]

    module Main
      ( main
      ) where
    
    import Prelude
    
    import Control.Monad.ST as ST
    import Data.Array as Array
    import Data.Array.ST as STArray
    import Effect (Effect)
    import Effect.Console as Console
    
    main :: Effect Unit
    main = Console.logShow $ ST.run do
      sta <- STArray.empty
      a <- STArray.unsafeFreeze sta
      pure (Array.length a)
    
[/code]

もっと良い方法があれば教えてください。


CC BY-SA 4.0
2019-04-05T08:10:39.167
53943
2019-04-05T09:20:22.823
2341
question
purescript
なぜ PureScript の Data.Array.ST の STArray には length がないのですか？


こんにちは。  
STArrayの長さが変化するオペレーションというと`push`と`pushAll`だと思いますが、これは評価結果としてlength ::
Intを返します。ほとんどの場合これで用は足りるということだと思います。  
Emptyは暗黙的に0であり、Arrayからの変換であれば元のArrayのlengthを取ればよく、`splice`は切り抜いたArrayを返すのでこれも直接lengthが取れます。


CC BY-SA 4.0
2019-04-05T09:20:22.823
53949
2019-04-05T09:20:22.823
22830
53943
answer