Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Re: Data constraint? (Francesco Ariis) 2. Re: Data constraint? (Galaxy Being) 3. import not working (Galaxy Being) 4. Re: import not working (Jesse Rudel) 5. Re: import not working (Galaxy Being) ---------------------------------------------------------------------- Message: 1 Date: Fri, 4 Jun 2021 17:58:51 +0200 From: Francesco Ariis <fa...@ariis.it> To: beginners@haskell.org Subject: Re: [Haskell-beginners] Data constraint? Message-ID: <20210604155851.GA29481@extensa> Content-Type: text/plain; charset=utf-8 Il 03 giugno 2021 alle 17:40 Galaxy Being ha scritto: > If I have a type > > type WaterChem = CaHardness NaturalChem | Alkalinity NaturalChem > > and I want to have the values of CaHardness and Alkalinity constrained to > positive Int and between certain high and low values, I could do a newtype to > creater a NaturalChem number, thus never less than 0, but what is the best > practice to insure these values are between a certain range? Types in > Haskell can't go that far, can they? Reading this Mhhh you could create a smart constructor data Prova = ProvConst Int -- ProvConst does not get exported. mkProva :: Int -> Prova -- This does get exported. mkProva i | i > 100 = 100 -- or error "… ⁝ In a «Parse, don’t validate» [1] fashion. If you need (as I suspect) to operate on those values, you will need to define a few typeclasses (`numbers` [2] is a good example from Hackage). Would that do? —F [1] https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/ [2] https://hackage.haskell.org/package/numbers-3000.2.0.2/docs/Data-Number-Natural.html ------------------------------ Message: 2 Date: Fri, 4 Jun 2021 11:13:33 -0500 From: Galaxy Being <borg...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] Data constraint? Message-ID: <cafahfsxqtmunccgt6jypmxikowmxyaxmvpalty0ng5nz7-q...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" Yes, I just discovered the HaskellWiki article on smart constructors! Will give it a try. On Fri, Jun 4, 2021, 11:01 AM Francesco Ariis <fa...@ariis.it> wrote: > Il 03 giugno 2021 alle 17:40 Galaxy Being ha scritto: > > If I have a type > > > > type WaterChem = CaHardness NaturalChem | Alkalinity NaturalChem > > > > and I want to have the values of CaHardness and Alkalinity constrained to > > positive Int and between certain high and low values, I could do a > newtype to > > creater a NaturalChem number, thus never less than 0, but what is the > best > > practice to insure these values are between a certain range? Types in > > Haskell can't go that far, can they? Reading this > > Mhhh you could create a smart constructor > > data Prova = ProvConst Int -- ProvConst does not get exported. > > mkProva :: Int -> Prova -- This does get exported. > mkProva i | i > 100 = 100 -- or error "… > ⁝ > > In a «Parse, don’t validate» [1] fashion. > If you need (as I suspect) to operate on those values, you will need > to define a few typeclasses (`numbers` [2] is a good example from > Hackage). > Would that do? > —F > > [1] https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/ > [2] > https://hackage.haskell.org/package/numbers-3000.2.0.2/docs/Data-Number-Natural.html > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20210604/21efd2fa/attachment-0001.html> ------------------------------ Message: 3 Date: Fri, 4 Jun 2021 16:48:11 -0500 From: Galaxy Being <borg...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: [Haskell-beginners] import not working Message-ID: <cafahfsvreysp1ukj0d243kxom+shqsdhzwbfoos3q4h0cnk...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" I go to a directory. I run stack install Safe I start up ghci and get the Prelude prompt. I run import Safe and I get import Safe | ^^^^^^^^^^^ Failed, no modules loaded. I'm once again frustrated. I try to load this hs file {-# LANGUAGE ViewPatterns #-} {-# LANGUAGE NoMonomorphismRestriction #-} import Safe lookupDefault :: Eq a => a -> b -> [(a,b)] -> b lookupDefault k _ (lookup k -> Just s) = s lookupDefault _ d _ = d headTup :: (a, [t]) -> [t] headTup (headMay . snd -> Just n) = [n] headTup _ = [] headNil :: [a] -> [a] headNil (headMay -> Just x) = [x] headNil _ = [] with the same result. What do I need to do? -- ⨽ Lawrence Bottorff Grand Marais, MN, USA borg...@gmail.com -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20210604/54943e56/attachment-0001.html> ------------------------------ Message: 4 Date: Fri, 4 Jun 2021 22:18:27 +0000 From: Jesse Rudel <jesse.ru...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] import not working Message-ID: <CADe=JVz7i6joVxQ=DijgNmmtr0tvc6_FoR=+srekqrms_sy...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" How are you invoking ghci? If it's a stack project you can try stack ghci if you haven't already. On Fri, 4 Jun 2021 at 21:51, Galaxy Being <borg...@gmail.com> wrote: > I go to a directory. I run > > stack install Safe > > I start up ghci and get the Prelude prompt. I run > > import Safe > > and I get > > import Safe > | ^^^^^^^^^^^ > Failed, no modules loaded. > > I'm once again frustrated. I try to load this hs file > > {-# LANGUAGE ViewPatterns #-} > {-# LANGUAGE NoMonomorphismRestriction #-} > > import Safe > > lookupDefault :: Eq a => a -> b -> [(a,b)] -> b > lookupDefault k _ (lookup k -> Just s) = s > lookupDefault _ d _ = d > > headTup :: (a, [t]) -> [t] > headTup (headMay . snd -> Just n) = [n] > headTup _ = [] > > headNil :: [a] -> [a] > headNil (headMay -> Just x) = [x] > headNil _ = [] > > with the same result. What do I need to do? > -- > ⨽ > Lawrence Bottorff > Grand Marais, MN, USA > borg...@gmail.com > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20210604/8d9983e9/attachment-0001.html> ------------------------------ Message: 5 Date: Fri, 4 Jun 2021 22:47:57 -0500 From: Galaxy Being <borg...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] import not working Message-ID: <CAFAhFSUnwSBdU=qDn=dyhnbivwtinsszonh6aojdptqbfla...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" I run ghci with > stack ghci On Fri, Jun 4, 2021 at 5:19 PM Jesse Rudel <jesse.ru...@gmail.com> wrote: > How are you invoking ghci? If it's a stack project you can try stack ghci > if you haven't already. > > On Fri, 4 Jun 2021 at 21:51, Galaxy Being <borg...@gmail.com> wrote: > >> I go to a directory. I run >> >> stack install Safe >> >> I start up ghci and get the Prelude prompt. I run >> >> import Safe >> >> and I get >> >> import Safe >> | ^^^^^^^^^^^ >> Failed, no modules loaded. >> >> I'm once again frustrated. I try to load this hs file >> >> {-# LANGUAGE ViewPatterns #-} >> {-# LANGUAGE NoMonomorphismRestriction #-} >> >> import Safe >> >> lookupDefault :: Eq a => a -> b -> [(a,b)] -> b >> lookupDefault k _ (lookup k -> Just s) = s >> lookupDefault _ d _ = d >> >> headTup :: (a, [t]) -> [t] >> headTup (headMay . snd -> Just n) = [n] >> headTup _ = [] >> >> headNil :: [a] -> [a] >> headNil (headMay -> Just x) = [x] >> headNil _ = [] >> >> with the same result. What do I need to do? >> -- >> ⨽ >> Lawrence Bottorff >> Grand Marais, MN, USA >> borg...@gmail.com >> _______________________________________________ >> Beginners mailing list >> Beginners@haskell.org >> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners >> > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > -- ⨽ Lawrence Bottorff Grand Marais, MN, USA borg...@gmail.com -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20210604/5a34d3c3/attachment.html> ------------------------------ Subject: Digest Footer _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners ------------------------------ End of Beginners Digest, Vol 155, Issue 2 *****************************************