I programmed in TypeScript like in Haskell (Lazy Evaluation)

Ғылым және технология

Hey!
In today's video I tried to explain Lazy Evaluation using TypeScript for all of the examples instead of Haskell. TypeScript is a superset of JavaScript which adds static typing on top of it. The combination of functional background of JavaScript and the strong static typing makes TypeScript a perfect environment for exploration of Haskell concepts but with a more familiar for mainstream developers programming language.
Hope you will find this explanation approach useful!
Links:
- Source Code: github.com/tsoding/lazy
- Deno: github.com/denoland/deno/rele...
- The Computerphile Video: • Infinite Data Structur...
- Similar Video of Mine: • Haskell for JavaScript...
- Patreon: / tsoding
- Twitch: / tsoding

Пікірлер: 148

  • @valcron-1000
    @valcron-10004 жыл бұрын

    Please bring HaskellRank back! I was a really cool series

  • @kid-vf4lu

    @kid-vf4lu

    4 жыл бұрын

    +1 HaskellRank is why I started.following this channel

  • @dimitrimitropoulos

    @dimitrimitropoulos

    4 жыл бұрын

    @@kid-vf4lu same

  • @nirgle
    @nirgle4 жыл бұрын

    A great demonstration of the sheer power of vim

  • @UODZU-P
    @UODZU-P4 жыл бұрын

    I was honestly not prepared for this level of memery

  • @lclutz
    @lclutz4 жыл бұрын

    Great video tzozin. You're making the most interesting technology related content on the internet right now imo. Keep it up 😘

  • @NikolajLepka
    @NikolajLepka4 жыл бұрын

    It's funny, Idris -- which is in large parts based on Haskell -- forewent lazy evaluation in part because it made it unclear whether lists were infinite or not. Instead, it marks infinite and lazy types explicitly, while still allowing for Haskell's nice parenthesis-free calling semantics.

  • @DevinRhode2
    @DevinRhode24 жыл бұрын

    Greatest thing I've seen in like 20 days of funemployed researching

  • @draakisback
    @draakisback4 жыл бұрын

    Very nice video. As KZreadr and educator myself I can appreciate how you've done all of this.

  • @fabiolirafilho
    @fabiolirafilho4 жыл бұрын

    this is why I love computer science. thanks for this university level class, tsogod.

  • @xetera
    @xetera4 жыл бұрын

    I wish this video and the json parser one was edited down to like 10-20 minutes so I could show other people without asking them to watch an hour and a half video :(

  • @driden1987

    @driden1987

    4 жыл бұрын

    Xetera been there!

  • @MaxPicAxe

    @MaxPicAxe

    4 жыл бұрын

    Edit it yourself then xD

  • @mksybr

    @mksybr

    4 жыл бұрын

    As well as MaxPicAxe's suggestion the code is relased under MIT, so you should be welcome to create a shorter video demonstrating (IANAL)

  • @HeatCrawler
    @HeatCrawler4 жыл бұрын

    Amazing! Also, I would recommend some if/else clean up, the code will look more impressive. You don't need an "else" if the function returns. A lot of indentation will change, the source code will be more readable. But I love it! Thank You!

  • @LambOfDemyelination
    @LambOfDemyelination4 жыл бұрын

    3:17 kinda cucumbersome

  • @Skeptyle

    @Skeptyle

    4 жыл бұрын

    lmfao

  • @Tsoding
    @Tsoding4 жыл бұрын

    Keep in mind that all of the code was written using Deno v0.31.0. Things may change in the future versions and the code may stop working. For the latest version of the code examples please visit: github.com/tsoding/lazy If something doesn't work in the latest examples feel free to report an issue or submit a Pull Request.

  • @fasogoss
    @fasogoss2 жыл бұрын

    I wish there was an alternate universe where tsoding was by Dad and I will sit by his side and learn programming hahaha. Love your videos Dad

  • @gregfletcher2360
    @gregfletcher23604 жыл бұрын

    Great video! I hope that you do some more fp in Typescript again!

  • @jailandrademx
    @jailandrademx4 жыл бұрын

    thanks for upload this video, I miss the streaming that day :(

  • @andrepadez
    @andrepadez2 жыл бұрын

    I love this, you just gained another subscriber! thanks

  • @gunncode
    @gunncode4 жыл бұрын

    Liked instantly for using deno.

  • @3266711732665514
    @32667117326655142 жыл бұрын

    hung, you are a great human!

  • @pictureus
    @pictureus4 жыл бұрын

    The method that called panic was unwrap which if None in Rust will panic. The developer haven't taken care of the outcome None. Cool video btw :)

  • @lucascyrne
    @lucascyrne4 жыл бұрын

    Can you make a serie of videos where you make haskell rank challenges without any built in function? only pure functional and haskell concepts like pattern matching or list comprehension? Thanks for your content, it's amazing! (:

  • @VulcanOnWheels
    @VulcanOnWheels4 жыл бұрын

    3:17 Am I the only one who hears "cucumbersome" at this point?

  • @mvmo4744
    @mvmo47444 жыл бұрын

    Nice, now i do have a new video for my next few toilet visits, thanks xD

  • @CodeWeaver
    @CodeWeaver4 жыл бұрын

    Minor quibble, but this needed more commentary about memoization. Repeated evaluations of a lazy value in these examples would result in re-evaluation of the computation. In Haskell, this doesn't happen, because the first attempt to evaluate it locks in the evaluated value for all future calls -- even if you share that lazy value out _before_ you force it -- ie, all references to the shared value share the forcing. It won't ultimately remove the dangers of 'thunk buildup' like you had with begin() in the range function, but it often can remove the situations in which it's a problem, and the inefficiencies in _not_ having memoization can put a damper on using this useful style. It may not be the main thing you wanted to talk about, but with the comparisons with Haskell, this is a nontrivial difference. (And one that _could_ probably be authored in TypeScript). Otherwise you're not _quite_ getting 'the full Haskell experience'. That said, this was a pretty nice talk!

  • @Tsoding

    @Tsoding

    4 жыл бұрын

    Yeah, I forgot to cover memoization, thanks for bringing it up! This "talks" are semi-improvised and sometimes I may completely forget to mention something. :D I'll keep working on improving the quality.

  • @dupersuper1000

    @dupersuper1000

    4 жыл бұрын

    Also, for silly reasons related to JS runtime implementation, it might be worth looking into a “trampoline” function or other techniques for stack-safe recursion.

  • @zcizzorhandz5567
    @zcizzorhandz5567Ай бұрын

    "I programmed in TypeScript like in Haskell (Lazy Evaluation)" == *I skated on my skateboard like a Lamborghini (Acceleration)*

  • @pavl1to
    @pavl1to4 жыл бұрын

    Русский акцент ни с чем не спутаешь)) Спасибо за видео.

  • @BHy4OK

    @BHy4OK

    4 жыл бұрын

    но надо признать он неплохо старается

  • @vivinvivin3020

    @vivinvivin3020

    4 жыл бұрын

    Я уверенно говорю по-английски. Неправильно, но уверенно. " Мне бы так 😪

  • @omaramo190683
    @omaramo1906832 жыл бұрын

    still my fav video

  • @anthonytonev1357
    @anthonytonev13573 жыл бұрын

    tsodin, TS - typescrypt, Oding - god of wisdom. Tsoding - God coding, God of coding confirmed.

  • @efzet76
    @efzet76 Жыл бұрын

    This is fun to watch, eventho it hurts my brain ! :P

  • @fredow123456
    @fredow1234564 жыл бұрын

    very interesting! thank you. btw you should use undefined type instead of null in Typescript i think!

  • @dupersuper1000

    @dupersuper1000

    4 жыл бұрын

    Wodman It’s really a serious debate whether you should use undefined or null for expressing different kinds of “nothing.” In practical terms, either one will suffice most of the time, but the main issue is consistency. Both types are heavily overloaded with other concepts in the ecosystem. E.g. “null” is often used to mean “unset value,” “missing value,” “error in computation,” “stream ended,” and a whole host of other context-dependent ideas. “undefined” has a similar set of overloaded meanings, but tends to connote the idea that the “nothingness” is unintentional. As in, accessing an undefined property on an object means that the property was never intended to exist. It just depends on your paradigm, and the libraries and frameworks you use, as well as the conventions of your team.

  • @insertoyouroemail
    @insertoyouroemail4 жыл бұрын

    It would be cool to have keywords effect/do what are to () => a what async/await is to Promise

  • @zamfofex

    @zamfofex

    4 жыл бұрын

    This is called “you just invented monads”.

  • @insertoyouroemail

    @insertoyouroemail

    4 жыл бұрын

    @@zamfofex I'm a professional Haskell programmer. I like to think of this proposal as prometheus stealing fire from the gods (Haskell programmers) and giving it to mortals (javascript programmers). Please forgive any hubris on my part. ;)

  • @zamfofex

    @zamfofex

    4 жыл бұрын

    @@insertoyouroemail I see, that’s fair enough. But I feel like what would be actually interesting would be some way to not have to annotate monadic operations in JavaScript - to have them be entirely transparent. Or even to _indeed_ annotate them, but have the notation be agnostic to which kind of monad it is (as opposed to introducing a different notation for each kind of monad). If you want a way to annotate specifically “creating a function without arguments”, and “invoking a function without arguments”, then there is really no need to reinvent the wheel with new keywords, you can just use existing notation: “() => expr” and “expr()”.

  • @insertoyouroemail

    @insertoyouroemail

    4 жыл бұрын

    @@zamfofex This is called "you just invented do-notation" ;)

  • @dupersuper1000

    @dupersuper1000

    4 жыл бұрын

    Zambonifofex that would be awesome to have. But unfortunately, the JS runtime does not track different kinds of monads, except for the built-in ‘Promise’ type. But even ‘Promise' fails to adhere to monad laws. When you resolve a ‘Promise’ it will automatically un-nest itself, and give you the type ‘T’, when it should just give you the inner promise. This also has the effect of swallowing errors if you don’t explicitly chain the ‘catch’ method for the inner promise.

  • @sefirotsama
    @sefirotsama3 жыл бұрын

    that was awesome.

  • @snoopy8870
    @snoopy8870Ай бұрын

    can you do same thing with js doc?

  • @dewijones92
    @dewijones924 жыл бұрын

    thanks for this

  • @HeatCrawler
    @HeatCrawler4 жыл бұрын

    Everything will work great with the compose implementation in JS.

  • @BradenBest
    @BradenBest Жыл бұрын

    I'm confused why one would bother with taking a slice of an infinite lazy list as opposed to just... calling a function. If lazy values essentially are functions, why even make the distinction? You could just make a structure {start, length, fn} that when parsed will generate your list {1, 10, n => n * n} -> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

  • @user-dc3zl4ps9s
    @user-dc3zl4ps9s2 жыл бұрын

    In short-circuit evaluation. We can do just a() && b()

  • @old_gaffer
    @old_gaffer3 жыл бұрын

    I don't think you need to make return type Lazy - only arguments should suffice. Was there a specific reason you chose to wrap all return statements in lambdas as well - that seemed redundant? (This is in reference to lazySum and lazyFirst)

  • @old_gaffer

    @old_gaffer

    3 жыл бұрын

    Never mind - at 1:02:38 I finally figured that you were trying to make the "ultimate Haskell experience" and not merely show the benefits of lazy evaluation.

  • @valenciawalker6498
    @valenciawalker649821 күн бұрын

    Thank youu

  • @plchldrr
    @plchldrr2 жыл бұрын

    1. Sincerely thank you for showing me how deno works and how great it is 2. -Ternary operator ?: shortcircuits too-

  • @omri9325
    @omri93254 жыл бұрын

    Isn't lazy of lazy is same as regular lazy? Like in typescript notation: Lazy is same as Lazy ?

  • @lostarts9946

    @lostarts9946

    4 жыл бұрын

    Lazy would type to () => () => number

  • @omri9325

    @omri9325

    4 жыл бұрын

    @@lostarts9946 I meant to ask if `Lazy` should automatically (implicitly?) flatten itself to `Lazy` like show promises do it. It saves a lot of annoying errors. like how `Promise.resolve(Promise.resolve('value'))` is same as `Promise.resolve('value')` I'm not that sharp on the terminology, but I think it's called monadic flatmap.

  • @dupersuper1000

    @dupersuper1000

    4 жыл бұрын

    Lordious it should never automatically unwrap the inner ‘Lazy’ type. The flatmap function should be called explicitly if that behavior is desired. The behavior of ‘Promise’ is a big problem IMO. And I’m not the only one who thinks so. Just look at this heated debate from year ago: github.com/promises-aplus/promises-spec/issues/94

  • @Muttisuri
    @Muttisuri4 жыл бұрын

    Following the code with deno I was systematically getting an "Object is possibly 'null'" error on the LazyList part... Edit 0: It seems that when I let the autocomplete use Optional Chaining it does work...

  • @Tsoding

    @Tsoding

    4 жыл бұрын

    What version of deno are you using?

  • @Muttisuri

    @Muttisuri

    4 жыл бұрын

    @@Tsoding Deno: 0.36.0 v8: 8.1.310 ts: 3.8.3 Vscode: 1.43.1 PS: I'm on windows but I'm using WSL (shouldn't affect something like this) PS2: I'm surprised I got a direct response :)

  • @Tsoding

    @Tsoding

    4 жыл бұрын

    @@Muttisuri Yep! I can reproduce the problem on Deno v0.36.0. The error caused by the strict null check that was not present in v0.31.0 at the time of the video recording. This is how you fix it: github.com/tsoding/lazy/commit/66ee9d29184d2681f802730c6a635a95b4f1d791 Thanks for letting me know about the problem!

  • @user-rf3zi7pt8r
    @user-rf3zi7pt8r4 жыл бұрын

    Блин, красавчик - шикарный английский.

  • @alexanderskladovski
    @alexanderskladovski3 жыл бұрын

    32:30 turing complete type system

  • @ceorecdeclec9774
    @ceorecdeclec97744 жыл бұрын

    47:42 I had the same problem. The stack can overflow if you store too many values because it isn't about how many levels deep, its about each of those levels adding to the stack, or in this case, one big level adding to the stack

  • @MonkeeSage

    @MonkeeSage

    4 жыл бұрын

    Also begin() was not a tail call since 1 was being added to it, so even if deno supports tail call optimization it wouldn't have worked.

  • @telnobynoyator_6183
    @telnobynoyator_61834 жыл бұрын

    "If it compiles it works" is not the point of rust. If it compiles, it's guaranteed to be memory safe, except if you explicitly tell it to ignore memory safety checks. Of course having your program guaranteed not to segfault will probably force you to write better code.

  • @dulanjala
    @dulanjala3 жыл бұрын

    I think you ran demo on top of itself or something make it crash like that... and i thought in rust unwrap is when you want it to crash and burn since something is really wrong. but here i think it was Options args that made it crash, strange... they didn't handle it "gracefully"

  • @CarterColeisInfamous
    @CarterColeisInfamous Жыл бұрын

    37:54 array destruction

  • @DanDart
    @DanDart4 жыл бұрын

    "It is not a tarball" - tsoding

  • @hansschenker
    @hansschenker3 жыл бұрын

    RxJs - Reactive Extensions for Javascript, also have lazy behavior baked in - Would you show some example in RxJs too? In Novosibirsk people have much time to reason about programming concepts!^_^!

  • @user-hd7ju4wu4b
    @user-hd7ju4wu4b2 жыл бұрын

    Ай маст сэй ай рили энджой йё контент

  • @Gruak7
    @Gruak72 жыл бұрын

    This whole video should be wrapped in a function

  • @ishdx9374
    @ishdx93743 жыл бұрын

    TSoding

  • @stephenkamenar
    @stephenkamenar4 жыл бұрын

    1:18:04 javascript nor typescript even use semicolons, lol. (that said there's very rare edge cases where you could need one)

  • @LambOfDemyelination

    @LambOfDemyelination

    4 жыл бұрын

    But you should include them.

  • @ireneuszgabrys

    @ireneuszgabrys

    4 жыл бұрын

    ​@@LambOfDemyelination not rly. You have to put one as first character if your line starts with bracket. Or If you want to have code from two lines written in single line then you will separate them with semicolon. That's it. I never use semicolons in personal projects. And if you uglify code then semicolons will be added automatically anyway to satisfy second case I mentioned above. I personally found it strange that JS world put semicolons because they think they are needed and Python world don't do it but they could just like in JS for the same reasons like having two things in single line. Try for yourself :) You can for example use code formatter prettier. Set options for semicolons and then for no semicolons. See the difference and you will see how not mandatory they are. It's perfectly safe.

  • @LambOfDemyelination

    @LambOfDemyelination

    4 жыл бұрын

    @@ireneuszgabrys Standardised JavaScript requires semicolons. Some JavaScript interpreters will insert semicolons in for you, like V8... It's called ASI (Automatic Semicolon Insertion). It wouldn't exist if semicolons weren't part of the language. You can end up with some really ugly looking situations/errors if you don't use semicolons.

  • @ireneuszgabrys

    @ireneuszgabrys

    4 жыл бұрын

    ​@@LambOfDemyelination I know about ASI so I don't understand why I have to do something by hand that was deliberately automated. Those tools: Babel, Uglify, Prettier, TypeScript and more (basically all that parse code to AST) will add semicolons as well. My question remains: why do it manually? Errors that the JS community is scarred of are because of not knowing the first case I was talking about.

  • @dupersuper1000

    @dupersuper1000

    4 жыл бұрын

    Farzher I don’t think anyone else in the comments has mentioned this, but ‘return’ statements should always include semicolons, and the expression to the right of the ‘return’ keyword should always be wrapped in parentheses when it it extends to multiple lines in the file. Both of these rules will prevent some weird edge case behaviors.

  • @aibh7903
    @aibh79034 жыл бұрын

    Have you ever considered using ReasonML?

  • @dupersuper1000

    @dupersuper1000

    4 жыл бұрын

    Aibhstín indeed, Reason is basically TS on steroids. And there is the (still technically under construction) Relude library which implements Haskell-like type-classes. It’s quite the powerful language...

  • @toxicdesire8811
    @toxicdesire88114 жыл бұрын

    51:44 will be back later.

  • @renkinjutsu01
    @renkinjutsu0110 ай бұрын

    I'm 3 years late to the party, but this was a great video! I'm just not sure how to apply what I just learned. What advantage does this give over traditional approaches (like using loops)? I can see that it has the potential to be more memory efficient since we're not storing an entire datastructure in memory. What other benefits are there and would you ever use this pattern in more procedural languages?

  • @kawaikaede2269
    @kawaikaede22692 жыл бұрын

    comfy

  • @MaxPicAxe
    @MaxPicAxe4 жыл бұрын

    Instant like, for using duck duck go

  • @martinalcala4823
    @martinalcala48234 жыл бұрын

    Generators inJavaScript are perfect for lazy evaluation

  • @feihcsim7045
    @feihcsim70454 жыл бұрын

    Anyone else want to just hug Alexey?

  • @angrykillerpigeons
    @angrykillerpigeons3 жыл бұрын

    in js you can use spread operator to call the rest on an array let [head, ...tail] = [1,2,3,4,5] head = 1 tail = [2,3,4,5]

  • @Someniatko
    @Someniatko4 жыл бұрын

    your voice sounds like Life of Boris

  • @andrasnadas9818
    @andrasnadas98182 жыл бұрын

    1:21:55 You just got a bigger prime number by typing some random digits, than the one You wanted to test... xD

  • @Baptistetriple0
    @Baptistetriple02 жыл бұрын

    very interesting video, but I wonder why your chat shit on every language other than haskell, like the the rust error at the beggining, it is a voluntarry error from the devs (you can see it because the unwrap method is being called on a result type, which means "if this is an error just crash the program"), and yes javascript has it flaws but I don't think programming complex web applications UI is better in haskell

  • @kerron68
    @kerron682 жыл бұрын

    1:01:49 how dare you bash my cult!

  • @dimitrimitropoulos
    @dimitrimitropoulos4 жыл бұрын

    You should check out ramda.js

  • @devincustodio2258
    @devincustodio22582 жыл бұрын

    cucumbersome

  • @UODZU-P
    @UODZU-P4 жыл бұрын

    when you want to put lambda calculus into javascript

  • @smolus0512
    @smolus05124 жыл бұрын

    5:30 Dude you can literally do the same with node. Its just the second link on downloads page and not the first one xd

  • @old_gaffer

    @old_gaffer

    3 жыл бұрын

    No, you can't. NodeJS doesn't ship as single executable.

  • @smolus0512

    @smolus0512

    3 жыл бұрын

    @@old_gaffer Yes it does. You choose "binary" option in the downloads section and you get a folder with a standalone node.exe inside.

  • @old_gaffer

    @old_gaffer

    3 жыл бұрын

    @@smolus0512 and node_modules and install_tools.bat and node_etw_provider.man and nodevars.bat and npm.cmd and npx and npx.cmd,etc... That can hardly be called "standalone".

  • @smolus0512

    @smolus0512

    3 жыл бұрын

    @@old_gaffer It comes with extra stuff in the folder but you can just delete it if you dont want it. The node.exe file works standalone

  • @old_gaffer

    @old_gaffer

    3 жыл бұрын

    @@smolus0512 Sure, but I think he was referring to why NodeJS can’t have a single executable with batteries included - the same way Deno does. If you watch here kzread.info/dash/bejne/ep6YrNyHn7fFoco.html you’ll see that in that single binary you get everything: runtime, package manager, dependency inspector, etc… in one word: everything and it's truly standalone (single file).

  • @user-zt1hx3ci2v
    @user-zt1hx3ci2v5 ай бұрын

    Я знаю, братик, только на стримы не ходил =)

  • @sefirotsama
    @sefirotsama3 жыл бұрын

    "A SINGLE EXECUTBLE! WHY NODEJS IS NOT LIKE THAT?"

  • @MuslihAlAqqad
    @MuslihAlAqqad3 жыл бұрын

    Hi Tsoding, would you mind to share how to be a great coder like you? :smile:

  • @ne4to777
    @ne4to7772 жыл бұрын

    Хорошая попытка, но на 91к сито уходит в переполнение стека. Мои соболезнования. Надеюсь, когда-нибудь оно станет по настоящему бесконечным

  • @koalabear9967
    @koalabear99674 жыл бұрын

    "I don't understand why you need all these shell scripts". Javascript developers man, javascript developers. npm install pad-left. They're not terribly sane.

  • @dupersuper1000

    @dupersuper1000

    4 жыл бұрын

    Koala Bear indeed, it’s Stockholm syndrome. And nobody realizes it.

  • @it1shka
    @it1shka4 жыл бұрын

    you speak with strong soviet accent comrade

  • @ishdx9374

    @ishdx9374

    3 жыл бұрын

    because he is, check his github or literally anything

  • @joseoliveira8423
    @joseoliveira84233 жыл бұрын

    Hey man! You are a GOD! I want to recommend you fp-ts. This is an awesome library for FP. I would love to see some content from you using this library. github.com/gcanti/fp-ts

  • @geektarded
    @geektarded4 жыл бұрын

    If your goal is to write unreadable / unmaintainable code, then you have accomplished that. Why do functional programmers abstract / genericize their code so much that the specifics of what a function is actually doing is lost. It is like abstracting all of your code to Func. This is code only a mathematician would love...and code that every application developer would hate. Some people are too smart for their own good.

  • @dupersuper1000

    @dupersuper1000

    4 жыл бұрын

    Geektarded I completely disagree. This is very understandable for anyone who is well-versed in functional programming. That the same critique could be made of other styles, like using inheritance in OOP. Why would you want to call a method that isn’t defined directly on the object you are using? Why use such a crazy indirection? Now I have to go look in a separate file to see what the function does, and god forbid it’s actually some overridden method from another parent class... You see, people write code that seems complex until you get used to the patterns. The nice thing about the functional style is that you can be sure that the type signature tells you most of what you need to know about a function, because the function is not allowed to perform side-effects. All it can do is compute the return type from the input types. The function’s name should tell you the rest of what you need to know about it. So if you know the types, you’re good.

  • @samuraijosh1595

    @samuraijosh1595

    11 ай бұрын

    when you work with those abstracted functions over and over knowng how they work under the hood, you'll embrace them as much as you embrace your print function in python.

  • @geektarded

    @geektarded

    11 ай бұрын

    @@samuraijosh1595 C# developer here so we have many (not all) of the good parts of functional programming available to us thanks to Erik Meijer.

  • @MrSjcris
    @MrSjcris4 жыл бұрын

    deno it's not node JS !

  • @TodorescuProgramming
    @TodorescuProgramming4 жыл бұрын

    most of this can be done with js (es6) , without the types

  • @vivinvivin3020

    @vivinvivin3020

    4 жыл бұрын

    "Types help you to find mistakes"

  • @dupersuper1000

    @dupersuper1000

    4 жыл бұрын

    Tudor Todorescu I prefer to write the type signature of my function first, since I generally know what it is supposed to do before I implement it. The type signature helps me implement it correctly 90% of the time. The other 10% can be verified with tests.

  • @mateusfccp
    @mateusfccp4 жыл бұрын

    The error happened because someone used unwrap. Like, why use Rust if you are going to unsafely unwrap the Options?

  • @unev
    @unev Жыл бұрын

    let's hang out

  • @unev

    @unev

    Жыл бұрын

    or in?

  • @unev

    @unev

    Жыл бұрын

    just hang on

  • @mateusvahl5072
    @mateusvahl50724 жыл бұрын

    this is not a silver bullet

  • @robertotomas
    @robertotomas4 жыл бұрын

    Deno has too much crap packed into it. That’s something that is going to change they’re going to first add more and later take away. And that in a nutshell is why.

  • @dupersuper1000

    @dupersuper1000

    4 жыл бұрын

    Roberto Tomás it’s easy to *say* they will take stuff away, but once a bunch of big companies have dependencies on those features, they will never take them out. Maybe they will deprecate them.

  • @johnnyphoney5669
    @johnnyphoney56694 жыл бұрын

    1:11:25 Yes, because you should say "what is it called", not "how is it called", of course unless you forget how to use your mouth to make a sequence of sounds which many people would interpret as that word you're trying to pronounce.

  • @dupersuper1000

    @dupersuper1000

    4 жыл бұрын

    Mr. UncleChu Both methods are fine... In many languages, the word used is the equivalent of “how” in English. In others, they use the equivalent of “what.” If you think about it, both of those English words make sense, because “what to say” and “how to say it” are extremely similar concepts, if not identical. The heart of the idea could be expressed as, “I have a concept in my mind which can be expressed in language, but I’m not sure about the proper way to express it in words.” I find that people who primarily speak Spanish, French, or other Latin-based languages also tend to say “how it is called,” “how you say,” “how they say,” etc.

Келесі