Proposal: Export Data.Word.Word from Prelude

Johan Tibell johan.tibell at gmail.com
Sat Aug 9 18:34:38 UTC 2014


+1


On Sat, Aug 9, 2014 at 8:27 PM, Carter Schonwald <carter.schonwald at gmail.com
> wrote:

> strong +1 from me!
>
>
> On Sat, Aug 9, 2014 at 7:38 AM, Herbert Valerio Riedel <hvr at gnu.org>
> wrote:
>
>> Hello *,
>>
>> Proposal
>> --------
>>
>> I hereby propose to export Haskell2010's Data.Word.Word type from the
>> Prelude
>>
>>
>> Motivation
>> ----------
>>
>> Starting with Haskell2010, "Data.Word" exporting the type 'Word', "an
>> unsigned integral type, with the same size as 'Int'" became part of the
>> Haskell Report.
>>
>> 'Word' is usually a better choice than 'Int' when non-negative
>> quantities (such as list lengths, bit or vector indices, or number of
>> items in a container) need to be represented. Currently however, 'Word'
>> is at a disadvantage (with respect to 'Int') in terms of public exposure
>> by being accessible only after an "import Data.Word".
>>
>> Moreover, since 'Word' is now part of the Haskell Report, libraries
>> should attempt to avoid name-clashing with 'Word' (and if they do, it
>> ought to be a conscious decision, which ought to be declared by a
>> requiring a "import Prelude hiding (Word)"). While one might think
>> 'Word' would be a popular type-name to use in Haskell code, the current
>> level of name collision is still rather low (as is shown in the next
>> section), so the cost would still be bearable at this point in my
>> opinion.
>>
>>
>> Due diligence (w.r.t. code breakage impact)
>> -------------------------------------------
>>
>> Packages depending on `haskell2010` or `haskell98` are not affected, and
>> neither would be those depending on `base` with a PVP-suggested upper
>> bound.
>>
>> However, to get a rough idea how widespread the use of 'Word' as a type
>> on Hackage currently is, here's a simple check for current uses of
>> 'Word' as a type-name performed with the simple heuristic search
>>
>>   find  -name '*.*hs*' -exec grep \
>>      '\(data\|newtype\|type\)[[:space:]]\+Word[ =]' {} +
>>
>> over the unpacked source trees of the latest versions of the current
>> 6766 packages on Hackage resulted in the following 43 packages being
>> possibly affected (see specific source-code matches at end of email[1]):
>>
>>  1   adict-0.4.1
>>  2   boxes-0.1.3
>>  3   cjk-0.1.0.1
>>  4   clash-prelude-0.5.1
>>  5   combinat-0.2.5.0
>>  6   concraft-pl-0.7.1
>>  7   Craft3e-0.1.0.10
>>  8   crf-chain1-0.2.2
>>  9   crf-chain1-constrained-0.3.0
>>  10  crf-chain2-generic-0.3.0
>>  11  crf-chain2-tiers-0.2.1
>>  12  delta-h-0.0.3
>>  13  eros-0.6.0.0
>>  14  estimators-0.1.4
>>  15  estreps-0.3.1
>>  16  FermatsLastMargin-0.1
>>  17  fsmActions-0.4.4
>>  18  gf-3.6
>>  19  happraise-0.1
>>  20  HAppS-Data-0.9.3
>>  21  happstack-contrib-0.2.1
>>  22  hist-pl-fusion-0.5.3
>>  23  Holumbus-Searchengine-1.2.3
>>  24  integer-pure-1.0
>>  25  ixset-typed-0.3
>>  26  language-bash-0.6.0
>>  27  language-sh-0.0.3.1
>>  28  lhc-0.10
>>  29  MemoTrie-0.6.2
>>  30  mpppc-0.1.3
>>  31  nerf-0.5.2
>>  32  regex-deriv-0.0.4
>>  33  regex-pderiv-0.1.3
>>  34  regexpr-symbolic-0.5
>>  35  remote-0.1.1
>>  36  soyuz-0.0.0
>>  37  text-icu-0.6.3.7
>>  38  text-register-machine-0.4.0
>>  39  utf8-light-0.4.2
>>  40  WordNet-1.1.0
>>  41  WordNet-ghc74-0.1.3
>>  42  xhaskell-library-0.0.6
>>  43  york-lava-0.2
>>
>>
>> Discussion period
>> -----------------
>>
>> 2 weeks
>>
>>
>> Footnotes
>> ---------
>>
>>  [1] More specifically, here's the output of the above mentioned `grep`
>> command:
>>
>> --8<---------------cut here---------------start------------->8---
>> adict-0.4.1/src/NLP/Adict/Core.hs:type Word a = V.Vector a
>> boxes-0.1.3/Text/PrettyPrint/Boxes.hs:data Word = Word { wLen :: Int,
>> getWord  :: String }
>> cjk-0.1.0.1/CJK/Data/CEDICT.hs:data Word = Word {
>> clash-prelude-0.5.1/src/CLaSH/Tutorial.hs:type Word = Signed 4
>> combinat-0.2.5.0/Math/Combinat/FreeGroups.hs:type Word a = [Generator a]
>> concraft-pl-0.7.1/src/NLP/Concraft/Polish/Morphosyntax.hs:data Word = Word
>> Craft3e-0.1.0.10/Chapter7.hs:type Word = String
>> Craft3e-0.1.0.10/Index.hs:type Word = String
>> crf-chain1-0.2.2/Data/CRF/Chain1/Dataset/External.hs:type Word a = S.Set a
>> crf-chain1-constrained-0.3.0/src/Data/CRF/Chain1/Constrained/Dataset/External.hs:data
>> Word a b = Word
>> crf-chain2-generic-0.3.0/Data/CRF/Chain2/Generic/External.hs:data Word a
>> b = Word {
>> crf-chain2-tiers-0.2.1/src/Data/CRF/Chain2/Tiers/Dataset/External.hs:data
>> Word a b = Word {
>> delta-h-0.0.3/src/EvalSem.hs:type Word = String
>> eros-0.6.0.0/src/Text/Eros/Message.hs:type Word         = L.Text
>> estimators-0.1.4/NLP/Probability/Example/Trigram.hs:newtype Word = Word
>> T.Text
>> estreps-0.3.1/src/Repeats.lhs:-- type Word = Int
>> FermatsLastMargin-0.1/FLM/WikiPages.hs:       newtype Word     = Word
>> String
>> fsmActions-0.4.4/Data/FsmActions.hs:newtype Word sy = Word [sy]
>> gf-3.6/lib/src/finnish/wordnet/FreqFin.hs:type Word = String
>> gf-3.6/treebanks/susanne/SusanneFormat.hs:type Word  = String
>> gf-3.6/treebanks/talbanken/Format.hs:data Word     = W  {id :: Id, word
>> :: String, pos :: Tag}
>> happraise-0.1/Main.hs:type Word = String
>> HAppS-Data-0.9.3/src/HAppS/Data/Atom.hs:    newtype Word = Word String
>> happstack-contrib-0.2.1/src/Happstack/Contrib/Atom.hs:    newtype Word =
>> Word String
>> hist-pl-fusion-0.5.3/src/NLP/HistPL/Fusion.hs:type Word = T.Text
>> Holumbus-Searchengine-1.2.3/src/Holumbus/Index/Common/BasicTypes.hs:type
>> Word                       = String
>> integer-pure-1.0/Data/Integer.hs:type Word    = Int    -- We fake the
>> Word type, to avoid nasty conversions.
>> ixset-typed-0.3/src/Data/IxSet/Typed.hs:    > newtype Word = Word String
>> language-bash-0.6.0/src/Language/Bash/Word.hs:type Word = [Span]
>> language-sh-0.0.3.1/Language/Sh/Syntax.hs:type Word = [Lexeme]
>> lhc-0.10/lib/base/src/Data/Word.hs:type Word = Word32
>> lhc-0.10/lib/base/src/GHC/Word.hs:data Word = W# Word# deriving (Eq, Ord)
>> MemoTrie-0.6.2/src/Data/MemoTrie.hs:--     newtype Word :->: a = WordTrie
>> ([Bool] :->: a)
>> mpppc-0.1.3/src/Text/PrettyPrint/MPPPC/TwoDim/Combinators/Flow.hs:data
>> Word s t = Printable s t =>
>> nerf-0.5.2/src/NLP/Nerf/Types.hs:type Word = T.Text
>> regex-deriv-0.0.4/Text/Regex/Deriv/ByteString/BitCode.hs:type Word =
>> S.ByteString
>> regex-deriv-0.0.4/Text/Regex/Deriv/ByteString/Posix.lhs:> type Word =
>> S.ByteString
>> regex-pderiv-0.1.3/Text/Regex/PDeriv/ByteString/LeftToRight.lhs:> type
>> Word = S.ByteString
>> regex-pderiv-0.1.3/Text/Regex/PDeriv/ByteString/LeftToRightD.lhs:> type
>> Word = S.ByteString
>> regex-pderiv-0.1.3/Text/Regex/PDeriv/ByteString/Posix.lhs:> type Word =
>> S.ByteString
>> regex-pderiv-0.1.3/Text/Regex/PDeriv/ByteString/RightToLeft.lhs:> type
>> Word = S.ByteString
>> regex-pderiv-0.1.3/Text/Regex/PDeriv/ByteString/TwoPasses.lhs:> type Word
>> = S.ByteString
>> regex-pderiv-0.1.3/Text/Regex/PDeriv/String/LeftToRightD.lhs:> type Word
>> = String
>> regexpr-symbolic-0.5/RegExpr/RegExprOperations.lhs:> type Word a = [a]
>> remote-0.1.1/examples/tests/Test-MapReduce.hs:type Word = String
>> remote-0.1.1/examples/kmeans/KMeans3.hs:type Word = String
>> soyuz-0.0.0/DCPU16/Instructions.hs:data Word
>> text-icu-0.6.3.7/Data/Text/ICU/Break.hsc:data Word = Uncategorized
>> -- ^ A \"word\" that does not fit into another
>> text-register-machine-0.4.0/Language/TRM/Base.hs:newtype Word = W
>> [Letter] deriving (Eq, Monoid)
>> utf8-light-0.4.2/src/Codec/Binary/UTF8/Light.hs:data Word = W# Word#
>> WordNet-1.1.0/NLP/WordNet/Types.hs:type Word = String
>> WordNet-ghc74-0.1.3/NLP/WordNet/Types.hs:type Word = String
>> xhaskell-library-0.0.6/Text/Regex/PDeriv/ByteString/LeftToRight.lhs:>
>> type Word = S.ByteString
>> xhaskell-library-0.0.6/Text/Regex/PDeriv/ByteString/Posix.lhs:> type Word
>> = S.ByteString
>> xhaskell-library-0.0.6/Text/Regex/PDeriv/ByteString/RightToLeft.lhs:>
>> type Word = S.ByteString
>> xhaskell-library-0.0.6/Text/Regex/PDeriv/ByteString/TwoPasses.lhs:> type
>> Word = S.ByteString
>> york-lava-0.2/modules/Lava/Prelude.hs:type Word n = Vec n Bit
>> --8<---------------cut here---------------end--------------->8---
>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://www.haskell.org/mailman/listinfo/libraries
>>
>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140809/eccff995/attachment-0001.html>


More information about the Libraries mailing list